搜索 – Flex和Bison Associativity难度
发布时间:2020-12-15 01:46:49 所属栏目:百科 来源:网络整理
导读:使用Flex和Bison,我有一个布尔查询语言的语法规范,它支持逻辑“和”,“或”和“非”操作,以及使用“()”的嵌套子表达式. 一切都很好,直到我注意到像“A和B或C和D”这样的查询我想解析为“(A B)|(C D)”实际上被解释为“A( B |(C D))“.我几乎可以肯定这是一
使用Flex和Bison,我有一个布尔查询语言的语法规范,它支持逻辑“和”,“或”和“非”操作,以及使用“()”的嵌套子表达式.
一切都很好,直到我注意到像“A和B或C和D”这样的查询我想解析为“(A& B)|(C& D)”实际上被解释为“A&( B |(C& D))“.我几乎可以肯定这是一个关联问题,但似乎无法在任何地方找到正确的解释或例子 – 或者我错过了一些重要的事情. 来自boolpars.y的相关信息: %token TOKEN %token OPEN_PAREN CLOSE_PAREN %right NOT %left AND %left OR %% query: expression { ... } ; expression: expression AND expression { ... } | expression OR expression { ... } | NOT expression { ... } | OPEN_PAREN expression CLOSE_PAREN { ... } | TOKEN { ... } ; 任何人都可以找到这个缺陷吗?我不明白为什么Bison没有给出“或”适当的优先权. 解决方法
来自野牛文档:
所以在你的情况下,OR在屏幕上较低并且具有更高的优先级. %left OR %left AND (我还没有测试过) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |