小编Nic*_*ans的帖子

使用PEG.js简单解析问题

我试图通过在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"] …

javascript parsing peg pegjs

21
推荐指数
1
解决办法
6434
查看次数

标签 统计

javascript ×1

parsing ×1

peg ×1

pegjs ×1