我在玩 nearley.js,有些东西让我很困惑。作为测试,我正在尝试构建一个解析扑克等级的解析器。
现在,这个语法按预期工作:
@{% function nuller() { return null; } %}
main -> _ composition _ {% nuller %}
composition -> _ expression _ {% nuller %}
| composition _ "," _ rank {% nuller %}
expression -> _ rank _ {% nuller %}
rank -> [a, k, q, j, t, A, K, Q, J, T, 2-9] {% nuller %}
_ -> [\s]:* {% nuller %}
但是,我更改| composition _ "," _ rank
为第二个,| composition _ "," _ expression
然后我结束了一个循环:
@{% function nuller() { return null; } %}
main -> _ composition _ {% nuller %}
composition -> _ expression _ {% nuller %}
| composition _ "," _ expression {% nuller %}
expression -> _ rank _ {% nuller %}
rank -> [a, k, q, j, t, A, K, Q, J, T, 2-9] {% nuller %}
_ -> [\s]:* {% nuller %}
有人可以解释一下为什么会这样吗?代码可以在操场上快速测试: https ://omrelli.ug/nearley-playground/
我使用的测试字符串是:a, k, q, j, t, 9, 8, 7, 6, 5, 4, 3, 2
非常感谢您!