0

我的输入是一个递归结构,看起来像这样(注意空白的第二行):

xxx @{} yyy @{ zzz @{} wwww }
 

我看到的语法应该是这样的:

start = item+
item = thing / space
thing = '@{' item* '}'
space = (!'@' .)+

但我得到的是

第 2 行第 1 列:应为“@{”、“}”或除输入结尾之外的任何字符。

我究竟做错了什么?

4

2 回答 2

1

我根本不知道 peg,但是快速浏览一下文档似乎说第四条规则中的点是问题所在。在线解析器成功:

start = item+
item = thing / space
thing = '@{' item* '}'
space = [ a-z]+

这会产生:

[
   [
      "x",
      "x",
      "x",
      " "
   ],
   [
      "@{",
      [],
      "}"
   ],
   [
      " ",
      "y",
      "y",
      "y",
      " "
   ],
   [
      "@{",
      [
         [
            " ",
            "z",
            "z",
            "z",
            " "
         ],
         [
            "@{",
            [],
            "}"
         ],
         [
            " ",
            "w",
            "w",
            "w",
            "w",
            " "
         ]
      ],
      "}"
   ]
]
于 2017-01-07T04:35:56.950 回答
0

为了让它运行,我将代码修改为:

start = item+
item = thing / space
thing = '@{' item* '}'
space =[^@}]+
于 2017-01-07T19:10:56.937 回答