我的输入是一个递归结构,看起来像这样(注意空白的第二行):
xxx @{} yyy @{ zzz @{} wwww }
我看到的语法应该是这样的:
start = item+
item = thing / space
thing = '@{' item* '}'
space = (!'@' .)+
但我得到的是
第 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",
" "
]
],
"}"
]
]
为了让它运行,我将代码修改为:
start = item+
item = thing / space
thing = '@{' item* '}'
space =[^@}]+