Bison解析器:冲突处理与特殊功能详解
1. 纯解析器与y.output文件
纯解析器在多线程程序中非常有用,每个线程可以解析来自不同源的输入。
Bison可以创建一个日志文件,传统上命名为y.output,现在更常见的是name.output,它显示解析器中的所有状态以及状态之间的转换。使用--report=all标志来生成日志文件。以下是第1章中Bison语法日志的一部分:
state 3 10 term: NUMBER . $default reduce using rule 10 (term) state 4 11 term: ABS . term NUMBER shift, and go to state 3 ABS shift, and go to state 4 term go to state 9 state 5 2 calclist: calclist calc . EOL EOL shift, and go to state 10每个状态中的点表示解析器在到达该状态时对规则的解析进度。例如,当解析器处于状态4时,如果看到NUMBER令牌,它将NUMBER压入栈并切换到状态3;如果看到ABS,则将其压入栈并切换回状态4,其他任何令牌都会导致错误。如果后续的归约操作使栈顶为