Javascript 使用PEG.js忽略空白

Javascript 使用PEG.js忽略空白,javascript,parsing,lexical-analysis,peg,Javascript,Parsing,Lexical Analysis,Peg,我想在语法中忽略空格和新行,以便在输出中丢失它们。此外,括号内的文字应在新数组中返回 语法 开始 ='a'?sep+('cat'/'dog')sep*'('sep*stmt_list sep*')) stmt_列表 =exp:[a-zA-Z]+{返回新数组(exp.join(“”))} 九月 =[''\t\r\n] 测试用例 狗(哈利) 输出 [ “a”, [ " " ], “狗”, [], "(", [ " " ], [ “哈利” ], [ " " ], ")" ] 我想要的输出 [ “

我想在语法中忽略空格和新行,以便在输出中丢失它们。此外,括号内的文字应在新数组中返回

语法

开始
='a'?sep+('cat'/'dog')sep*'('sep*stmt_list sep*'))
stmt_列表
=exp:[a-zA-Z]+{返回新数组(exp.join(“”))}
九月
=[''\t\r\n]
测试用例

狗(哈利)
输出

[
“a”,
[
" "
],
“狗”,
[],
"(",
[
" "
],
[
“哈利”
],
[
" "
],
")"
]
我想要的输出

[
“a”,
“狗”,
[
“哈利”
]
]

您必须更多地分解语法,使用更多的“非终结符”(不确定这是否是您在PEG中所称的终结符):

谢谢你问这个问题

编辑:
为了增加可读性,有两个产品:
\uu
\u

谢谢!只有一件事:试试
狗(哈利)
。这篇文章应该是可选的。将
'a'
(在文章中)带到
文章
(在开始时)仍将返回空字符串。。。这与PEG.js有关吗?我想让“开始”规则包含“文章”可能会有所帮助。然后,“article”规则本身可以是
'a'sep*
,然后它还允许
adog(Harry)
。不管怎样,也许我用错了工具。。。我有一个xdot(xdot基于点),我想解析它并将其绘制到画布上。你知道有没有其他节省时间的方法来评估文件的语法(除了编写我自己的解析器或使用类似(功能不够)的东西)吗?至于如何解析
dot
文件,语法非常复杂,我认为你需要一个“真正的”解析器。当然,它不必是钉住的;您可以用JavaScript编写自己的递归下降解析器,或者使用类似的语言。我没有PEG解析的经验,但我认为这很有趣。:-)不是
[''\t\r\n]
,而是
[\t\r\n]
<代码>[''\t\r\n]将捕获
'
start
  = article animal stmt_list

article
  = article:'a'? __ { return article; }

animal
  = animal:('cat'/'dog') _ { return animal; }

stmt_list
  = '(' _ exp:[a-zA-Z]+ _ ')' { return [ exp.join('') ]; }

// optional whitespace
_  = [ \t\r\n]*

// mandatory whitespace
__ = [ \t\r\n]+