Flex和bison中的逻辑表达语法
Logical expression Grammar in Flex and bison
我正在为flex和bison中的逻辑表达式编写一个简单的语法。该表达式是后缀表达式。这是我的yacc代码。
float_logic_expr:
float_logic_expr
| float_logic_exprs
;
float_logic_exprs:
float_reln_expr
| float_reln_expr float_reln_expr PP_AND
| float_reln_expr float_reln_expr PP_OR
;
string_logic_expr:
string_reln_expr
| string_reln_expr string_reln_expr PP_AND
| string_reln_expr string_reln_expr PP_OR
;
以上规则适用于以下语句。
if #a 40 > #b 20 == && then
但是,如果我再给这个逻辑表达式一个条件,它就会失败。
if #a 40 > #b 20 == && #b 30 == && then
分析错误。
我应该如何更改语法以适用于多个关系表达式?
它在做你让它做的事情,不是吗?
float_logic_exprs
: float_reln_expr
| float_reln_expr float_reln_expr PP_AND
| float_reln_expr float_reln_expr PP_OR
;
也就是说,逻辑表达式是一个关系表达式或两个(确切地)关系表达式,后跟一个AND
或OR
标记。但是您提供的示例表明,您希望逻辑表达式能够将另一个逻辑表达式作为参数,而不仅仅是关系表达式。
此外,这毫无意义:
float_logic_expr:
float_logic_expr
| float_logic_exprs
;
由于生产float_logic_expr: float_logic_expr
永远不会有用(而且它必须触发某种野牛警告)。
所有这些都应该表明你想要:
float_logic_expr
: float_reln_expr
| float_logic_expr float_logic_expr PP_AND
| float_logic_expr float_logic_expr PP_OR
;
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- Bison语法对重复的表征/表达进行分解
- Flex Bison构造的编译器打印正确的结果,然后给出语法错误
- Flex和bison中的逻辑表达语法
- bison和lex语法编译缓慢