我一直在研究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]`
答案 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]