Bison语法解析器使用指南:从基础到高级应用
1. 运算符优先级与结合性
运算符按照优先级递增的顺序进行声明。在同一行声明的所有运算符具有相同的优先级。例如,Fortran语法可能包含以下内容:
%left '+' '-'
%left '*' '/'
%right POW
这里优先级最低的运算符是 + 和 - ,中等优先级的运算符是 * 和 / ,最高优先级的是 POW ,它代表 ** 幂运算符。
当出现移进 - 归约冲突时,Bison会比较可能移进的标记的优先级和可能归约的规则的优先级。如果标记的优先级更高,则进行移进操作;如果规则的优先级更高,则进行归约操作。如果两者优先级相同,Bison会检查结合性:如果是左结合的,则进行归约;如果是右结合的,则进行移进;如果是非结合的,Bison会生成错误。
优先级声明主要用于处理表达式语法,例如:
expr OP expr
表达式语法几乎总是使用优先级声明。另一个常见的用途是处理 if/then/else 结构,可以更轻松地解决“悬空else”问题。
2. 递归规则
为了解析长度不定的项目列表,可以编写递归规则,即根据自身定义的规则。例如
超级会员免费看
订阅专栏 解锁全文
280

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



