2

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

1 回答 1

1

解决此问题的一种方法是查找]后面没有分号的 a,即。"]" (!";"). 在下面的示例中,我还使用$()将 组合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]
于 2018-08-16T18:25:59.330 回答