PEGjs能否将语句的“结束”字符作为输入?

时间:2018-08-16 16:01:13

标签: javascript pegjs

我一直在研究PEGjs语法。大部分都可以,但是我在最后一件事上遇到了麻烦。我的解析器接收的输入看起来像这样:First:[content];并返回类型(“第一”或“第二”)以及内容中的每个元素(“ c”,“ o” ...)。我还需要它能够接受]作为输入,因此它应该能够解析以下内容:First:[co]nt];

有人对我该如何做有任何想法吗?这是我到目前为止的内容:

prod = unit+
unit = u:(form / size)
form = key:(kind)  ":" value:(clas)  ";"  {return {type:key, value:value} }
clas = "[" v:(charact+) "]" { return {type:"class",value:v} }
kind = "First" / "Second"
charact = letters / symbols
symbols = "(" / ")" / "!" / "?"  /  "%"  / "{" /  "}" / "[" // "]"
letters = [A-Za-z]`

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是寻找一个],不要在其后加上分号,即。 "]" (!";")。在下面的示例中,我还使用$()symbols组合成一个字符串。

prod = unit+
unit = u:(form / size)
form = key:(kind)  ":" value:(clas)  ";"  {return {type:key, value:value} }
clas = "[" v:(charact+) "]" { return {type:"class",value:v} }
kind = "First" / "Second"
charact = letters / symbols
symbols = $("(" / ")" / "!" / "?"  /  "%"  / "{" /  "}" / "[" / "]" (!";"))
letters = [A-Za-z]