我试图通过在PEG.js操场上输入简单的语法来绕过PEG .
例1:
"abcdef1234567ghijklmn8901opqrs"期望的输出: ["abcdef", "1234567",
"ghijklmn", "8901", "opqrs"]
实际产量: ["abcdef", ["1234567", ["ghijklmn", ["8901", ["opqrs", ""]]]]]
这个例子非常有效,但是我可以让PEG.js不将生成的数组嵌套到百万级别吗?我假设诀窍是使用concat()而不是join()某个地方,但我找不到这个地方.
start
= Text
Text
= Numbers Text
/ Characters Text
/ EOF
Numbers
= numbers: [0-9]+ {return numbers.join("")}
Characters
= text: [a-z]+ {return text.join("")}
EOF
= !.
Run Code Online (Sandbox Code Playgroud)
例2:
与示例1相同的问题和代码,但将字符规则更改为以下内容,我预期会产生相同的结果.
Characters
= text: (!Numbers .)+ {return text.join("")}
Run Code Online (Sandbox Code Playgroud)
结果输出是:
[",a,b,c,d,e,f", ["1234567", [",g,h,i,j,k,l,m,n", ["8901", [",o,p,q,r,s", ""]]]]]
Run Code Online (Sandbox Code Playgroud)
为什么我得到所有这些空的比赛?
例3:
最后一个问题.这根本不起作用.我怎样才能使它工作?对于奖励积分,任何关于效率的指针?例如,如果可能,我应该避免递归吗?
我也很欣赏一个很好的PEG教程的链接.我已阅读(http://www.codeproject.com/KB/recipes/grammar_support_1.aspx),但正如您所见,我需要更多帮助......
'abcdefghijklmnop"qrstuvwxyz"abcdefg'["abcdefghijklmnop", "qrstuvwxyz",
"abcdefg"] …