Bison 语法解析器使用指南
1. 运算符优先级与结合性
运算符按照优先级递增的顺序进行声明。在同一行声明的所有运算符具有相同的优先级。例如,Fortran 语法可能包含以下内容:
%left '+' '-'
%left '*' '/'
%right POW
这里优先级最低的运算符是 + 和 - ,中等优先级的运算符是 * 和 / ,最高优先级的是 POW ,它代表 ** 幂运算符。
1.1 使用优先级和结合性解决冲突
语法中的每个标记都可以通过优先级声明分配一个优先级和结合性。每个规则也可以有一个优先级和结合性,它取自规则中的 %prec 子句,或者如果没有该子句,则取自规则中最右边有优先级分配的标记。
当出现移进 - 归约冲突时,Bison 会比较可能移进的标记的优先级和可能归约的规则的优先级。如果标记的优先级更高,则进行移进操作;如果规则的优先级更高,则进行归约操作。如果两者优先级相同,Bison 会检查结合性。如果是左结合的,则进行归约;如果是右结合的,则进行移进;如果是非结合的,Bison 会生成一个错误。
1.2 优先级的典型用途
虽然理论上可以使用优先级来解决任何类型的移进 - 归约冲突,但应该仅在少数理解透彻的情况下使用优先级,否则应重写语法。优先级声明旨在处理表达
超级会员免费看
订阅专栏 解锁全文
52

被折叠的 条评论
为什么被折叠?



