gpt4 book ai didi

search - Flex 和 Bison Associativity 难度

转载 作者:行者123 更新时间:2023-12-05 00:43:22 31 4
gpt4 key购买 nike

使用 Flex 和 Bison,我有一个 boolean 查询语言的语法规范,它支持逻辑“与”、“或”和“非”操作,以及使用“()”的嵌套子表达式。

一切都很好,直到我注意到诸如“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 没有给出“或”适当的优先级。

最佳答案

来自野牛文档:

Operator precedence is determined by the line ordering of the declarations; the higher the line number of the declaration (lower on the page or screen), the higher the precedence.



因此,在您的情况下,OR 在屏幕上较低并且具有较高的优先级。
将订单更改为
%left OR
%left AND

(虽然我没有测试过)

关于search - Flex 和 Bison Associativity 难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046428/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com