第三章
分析过程
任务:1.判别一个字符串是否为句子
2.分析出句子的语法结构
上下文无关文法(CFG)
一种描述程序设计语言的语法结构,例:
exp → exp op exp | (exp) | number
op → + | - | *
正则表达式是CFG的字符
推导
语法变量的具体化,例:
CFG G = (T, N , S , P)
T = 终结符
N = 非终结符
S = 开始符号
P = 推导式集合
分析树:
语法树:包含转化的所需的所有信息,用于简化分析树
二义性
有最左推导和最右推导,分析树有两个。例:34 - 3 * 42,对应文法:
最左推导:
最右推导:
对应的语法树有两个:
无法确定结构 → 二义性
设置优先权
引起二义性的原因之一:优先度不同的算符及相关规则混放在一起
解决:把具有相同优先权的算符归纳在一组中(优先级连)
设置优先权:令 * 运算优先于 + 和 - 运算
修改文法:
把优先度分组并为分组规定不同的规则
让优先度低的算符离开始符号近的规则中,即使其离根节点比较近,高优先度的
设置结合性
引起二义性另一个原因:双向递归,即可以从右边的exp展开,也可以从左边的exp展开
解决:抑制某一方向的展开,不允许在该方向递归
希望左结合:去掉右递归,保留左递归
EBNF 表示法
一种产生式的简写法