概念
- 上下文无关文法
- 语法制导翻译
- 词法单元
- 抽象语法树
- 三地址中间代码
- ε 表示空字符串
- 文法二义性:多棵语法分析树可以生成一个给定的终结符号串
解释
- 上下文无关文法的构成:
- 终结符号集合
- 非终结符号集合
- 产生式集合
- 开始符号
- 推导:从开始符号出发,不断将非终结符号替换为某个产生式的体
- 语法分析树:A -> XYZ
- 二义性
- 二义性问题举例
对于文法:string -> string - string | string + string | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
则表达式 9 - 5 + 2 可以用两种语法树表示
左边的语法树对应的表达式为 9 - 5 + 2;
右边的语法树对应的表达式为 9 - (5 + 2);
于是上述文法具有二义性。 - 二义性问题解决方法:制定规则
2.1. 规定运算符结合性:- 左结合: 当分量的左右都有运算符时,它属于左边。+, -, *, /都是左结合。例如1 + 2 + 3,会从左到右运算,所以2属于左边的加号。
- 右结合: 当分量的左右都有运算符时,它属于右边。=, -=, += 都是右结合。例如a = b = c,等价于a = (b = c)
下图展示了左结合运算符文法和右结合运算符文法的分析树
2.2. 规定运算符优先级