【发布时间】:2026-02-03 13:45:01
【问题描述】:
假设我有这样的语法:
expr : expr '+' expr { $$ = operation('+', $1, $3); }
| expr '-' expr { $$ = operation('-', $1, $3); }
| expr '*' expr { $$ = operation('*', $1, $3); }
| expr '/' expr { $$ = operation('/', $1, $3); }
| num
;
其中每个运算符都有一个优先级并被标记为左结合。
然后我想重构我的语法,这样:
op : '+' | '-' | '*' | '/' ;
expr : expr op expr { $$ = operation($2, $1, $3); }
| num
;
在这种情况下,yacc(如果有的话)如何确定op 的关联性和优先级?在评估op 时,它会通过+、-、* 和/ 的所有可能的优先级/关联性进行追踪,还是为非终结符号定义关联性没有意义?
AFAIK,具有非终结符的优先顺序,它使用最右边的终结符的优先级,但我找不到任何关于非终结符的关联规则本身的文档。
【问题讨论】:
标签: yacc