【发布时间】:2022-01-04 00:56:16
【问题描述】:
我正在尝试制作一个简单的 PEG (pegjs) 语法来解析空格分隔的列表或逗号分隔的数字列表,但我显然缺少一些基本的东西。也就是说,我想匹配“1 2 3”或“1,2,3”之类的字符串,而不是“1 2,3”的混合表达式。
我尝试的语法是(可以在https://pegjs.org/online 运行):
start = seq
seq = num (" " n:num {return n})*
/ num ("," n:num {return n})*
num = a:$[0-9]+ {return parseInt(a, 10)}
EOL = !.
但是,这个语法只会解析一个空格分隔的列表。如果我将其修改为:
start = seq
seq = num (" " n:num {return n})* EOL
/ num ("," n:num {return n})* EOL
num = a:$[0-9]+ {return parseInt(a, 10)}
EOL = !.
它将解析空格分隔或逗号分隔的列表。但是,我觉得我不需要在每个表达式的末尾添加 EOL ......我认为,当给定一个逗号分隔的列表时,pegjs 会尝试将它与空格分隔的列表匹配,失败, 然后匹配逗号分隔的列表规则。
我错过了什么?
【问题讨论】:
标签: javascript parsing peg pegjs