在Bison中为布尔操作数创建乘积的方法

在Bison中为布尔操作数创建乘积的方法,bison,yacc,lex,shift-reduce,Bison,Yacc,Lex,Shift Reduce,我正在Bison中创建一个解析器,并尝试转换规则: E := E op E op := + | - | > | & E还有其他规则,比如否定,当然,E可以是一个数字。我想知道制作这些作品的最佳方式是什么。我见过一些计算器示例,其中人们为每个操作数写出$$=$1'+'$3等 我的lex文件以{return yytext[0];}的形式返回操作数,但我发现很难找到资源来创建其他产品(比较、否定和否定)。我有Levine等人的yacc&lex的书,但我仍然对如何进行这项工作感到困惑

我正在Bison中创建一个解析器,并尝试转换规则:

E := E op E
op := + | - | > | & 
E还有其他规则,比如否定,当然,E可以是一个数字。我想知道制作这些作品的最佳方式是什么。我见过一些计算器示例,其中人们为每个操作数写出$$=$1'+'$3等

我的lex文件以
{return yytext[0];}
的形式返回操作数,但我发现很难找到资源来创建其他产品(比较、否定和否定)。我有Levine等人的yacc&lex的书,但我仍然对如何进行这项工作感到困惑

我相信我可以执行
exp'>'exp{$$=$1>$3}
exp'&'exp{$$$=$1&$3}
,并返回一个bool值,我可以将其定义为一个类型,但我该怎么做呢


如果有一种优雅的方法可以做到这一点,如果有任何资源可以帮助我编写生产规则,我会很高兴的。我知道我可以写C代码,但我在这方面是个新手,我很不确定

你已经掌握了语法基础,但你需要多读一点关于C的知识。C中的布尔and运算符是写的
&&
&
是一个按位运算符,其结果略有不同。在C语言中,布尔值是整数,0为false,其他所有值为true。所以你不需要一个新的类型。(你可以
#包括stdbool
,它将定义类型
bool
和常量
true
false
,但这只是表面上的,幕后没有任何变化。谢谢你,这真的很有帮助,因为我需要研究C,而不仅仅是搜索关于yacc或Bison的问题!