【发布时间】:2019-06-12 02:10:57
【问题描述】:
我正在尝试解析一个逗号分隔的列表。为了简化,我只是使用数字。这些表达式是有效的:
(1, 4, 3)
()
(4)
我可以想到两种方法来做到这一点,我想知道为什么失败的示例不起作用。我相信这是一个正确的 BNF,但我不能让它像 PEG 一样工作。谁能准确地解释为什么?我正在尝试更好地理解 PEG 解析逻辑。
我在这里使用在线浏览器解析器生成器进行测试: https://pegjs.org/online
这不起作用:
list = '(' some_digits? ')'
some_digits = digit / ', ' some_digits
digit = [0-9]
(其实解析没问题,喜欢()或(1)但不识别(1, 2)
但这确实有效:
list = '(' some_digits? ')'
some_digits = digit another_digit*
another_digit = ', ' digit
digit = [0-9]
这是为什么呢? (这里是语法新手)
【问题讨论】:
标签: parsing grammar left-recursion pegjs