首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PEG.js end of input故障

PEG.js end of input故障
EN

Stack Overflow用户
提问于 2012-10-05 17:58:03
回答 1查看 3K关注 0票数 5

我正在尝试为PEG.js编写一个简单的语法,它将匹配下面这样的内容:

代码语言:javascript
运行
复制
some text;
arbitrary other text that can also have µnicode; different expression;
let's escape the \; semicolon, and \not recognized escapes are not a problem;
possibly last expression not ending with semicolon

基本上,这些是一些用分号分隔的文本。我的简化语法如下所示:

代码语言:javascript
运行
复制
start
= flow:Flow

Flow
= instructions:Instruction*

Instruction
= Empty / Text

TextCharacter
= "\\;" /
.

Text
= text:TextCharacter+ ';' {return text.join('')}

Empty
= Semicolon

Semicolon "semicolon"
= ';'

问题是,如果我在输入中放入分号以外的任何内容,我会得到:

代码语言:javascript
运行
复制
SyntaxError: Expected ";", "\\;" or any character but end of input found.

如何解决这个问题?我读到过PEG.js无法匹配输入末尾。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 20:02:38

您的TextCharacter不应与任何字符( .)匹配。它应该匹配除反斜杠和分号之外的任何字符,或者它应该匹配转义字符:

代码语言:javascript
运行
复制
TextCharacter
 = [^\\;]
 / "\\" .

第二个问题是,您的语法要求您的输入以分号结尾(但您的输入不以;结尾)。

不如这样吧:

代码语言:javascript
运行
复制
start
 = instructions

instructions
 = instruction (";" instruction)* ";"?

instruction
 = chars:char+ {return chars.join("").trim();}

char
 = [^\\;]
 / "\\" c:. {return ""+c;}

代码语言:javascript
运行
复制
[
   "some text",
   [
      [
         ";",
         "arbitrary other text that can also have µnicode"
      ],
      [
         ";",
         "different expression"
      ],
      [
         ";",
         "let's escape the ; semicolon, and not recognized escapes are not a problem"
      ],
      [
         ";",
         "possibly last expression not ending with semicolon"
      ]
   ]
]

请注意,现在尾随的分号是可选的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12743859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档