4.1 Introduction
语法分析是将词法单元构造成语法树。也与符号表有关
三种语法分析方法:(常用后两者)
- universal 通用
- top-down 自顶向下
- bottom-up 自底向上
错误恢复
- 恐慌模式:发生错误舍弃后面的输入,直到找到正确token
- 短语层次恢复:对后面局部性纠正,替换前缀为可能正确的串
- 错误产生式:构造可能错误语句的产生式,如果符合,进行对应的错误处理
- 全局纠正:通过最小改动序列,得到全局开销最低纠正方案
4.2 上下文无关文法
non-terminal 非终止符:表示还能替换成其他形式的结构。一般用大写字母或者小写名字标识
terminal 终止符:不能再替换了的符号,一般是运算符、界符、数字
start symbol 开始符:一般是在语法规则第一个,通常是exp或S
产生式
example :
exp -> exp op exp | (exp) | number
-> 左边是结构的名字
-> 右边是由 | 分隔开的由terminal和nonterminal组成的文法符号串(说白了就是语法结构)
这里的意思用大白话说就是,exp可以替换成 exp op exp 或者(exp) 或者 number三种形式
特殊产生式
左递归:A->Aα
右递归:A->αA
推导 derivation
将开始符S(一定是nonterminal),通过产生式的替换,向目标字符串接近,
推导可以证明该句子符合该语法
- 最左推导:优先替换最左边的非终结符
- 最右推导:优先替换最右边的非终结符
4.3 表示语法
二义性语法:存在一个字符串在该语法下有两个不同的最左(右)推导或者语法树
用定义证明语法具有二义性
如何消除二义性:
- 优先级越低,放在离开始符越近
- 最近嵌套
- 结合方向
左递归产生式的运算符是左结合的,右递归产生式的运算符是右结合的