我想在我的语法中忽略空格和换行符,以便它们不会出现在PEG.js输出中。此外,方括号内的文字应该返回一个新数组。
语法
start
= 'a'? sep+ ('cat'/'dog') sep* '(' sep* stmt_list sep* ')'
stmt_list
= exp: [a-zA-Z]+ { return new Array(exp.join('')) }
sep
= [' '\t\r\n]
测试用例
a dog( Harry )
输出
[
"a",
[
" "
],
"dog",
[],
"(",
[
" "
],
[
"Harry"
],
[
" "
],
")"
]
我想要的输出
[
"a",
"dog",
[
"Harry"
]
]
dog(Harry)
。冠词应该是可选的。将?
从'a'
(在冠词中)移到start
(在文章开头)仍然会返回一个空字符串...这与PEG.js有关吗? - Matthiasadog(Harry)
。不管怎样,也许我正在使用错误的工具... 我有一个 xdot 语法(xdot 基于 dot),我想解析并绘制到画布上。你知道除了编写自己的解析器或使用像 canviz(功能不够)之类的东西之外,还有什么其他节省时间的方法来评估文件的语法吗? - Matthiasdot
文件,语法足够复杂,我认为你需要一个“真正”的解析器。当然它不一定是 PEG;你可以用 JavaScript 编写自己的递归下降解析器,或者使用类似 Jison 的工具。我没有 PEG 解析的经验,但我觉得它很有趣。 :-) - Pointy[' '\t\r\n]
,而是[ \t\r\n]
。[' '\t\r\n]
会匹配'
。 - alsotang