首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的Nearley语法会导致循环?

为什么我的Nearley语法会导致循环?
EN

Stack Overflow用户
提问于 2019-06-19 14:24:36
回答 1查看 108关注 0票数 1

我在玩nearley.js,有些东西让我很困惑。作为一种测试,我正在尝试构建解析器解析扑克排名。

现在,这个语法正在按预期工作:

代码语言:javascript
运行
复制
@{% 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,最后得到一个循环:

代码语言:javascript
运行
复制
@{% 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

非常感谢您提前!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 09:37:51

可以对字符串中的每个值进行多种解释,这是因为在表达式和排名之前都有可选的空格:

如果查看第二个元素k,可以将其解释为:

  • 空间+表达式
  • 空间+秩

由于您有2个可能的12项在您的字符串,您将得到144种可能的组合。

这将返回一个解决方案(我忽略了expression之前的可选空格):

代码语言:javascript
运行
复制
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 %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56670020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档