【发布时间】:2011-04-11 00:31:36
【问题描述】:
我需要一些有关 yacc 的帮助。 我正在研究中缀/后缀翻译器,中缀到后缀部分非常简单,但我在后缀到中缀翻译时遇到了一些问题。 这是我将要做什么的一个例子(只是为了翻译一个简单的 ab+c- 或 abc+-)
exp: num {printf("+ ");} exp '+'
| num {printf("- ");} exp '-'
| exp {printf("+ ");} num '+'
| exp {printf("- ");} num '-'
|/* empty*/
;
num: number {printf("%d ", $1);}
;
显然它不起作用,因为我在实际正文之前要求一个动作(使用 printfs)所以,在编译时,我得到了很多
警告:由于冲突,规则在解析器中无用
问题是 printfs 正是我需要它们的地方(或者我的输出不会是中缀表达式)。有没有办法将打印操作保留在那里并让 yacc 确定它需要使用哪个?
【问题讨论】:
标签: yacc