语法分析器功能
语法分析的工作是分析一个个独立的单词之间的组合规则从而获得文本的含义,检查错误
步骤:产生文法–>消除二义性–>消除左递归–>提取左因子–>写成巴克斯范式–>编程语言实现
产生文法
消除二义性(改写文法)
二义性:产生的分析树不止一棵
产生二义性的原因是文法缺少对文法符号结合性和优先级的规定
消除二义性的步骤:
1.分析运算符的优先级和结合性
2.引入新的非终结符,增加一个结构并提高优先级、
高于二元加减的运算符共有四类,所以要引入四个新的非终结符,依次是Term,Factor,Compomnent,Atom
3**.确定结合性**
因此Expression在+或-的左边出现,Term在*或/的左边出现,Factor在-或+的右边出现,Power在**de 右边出现,从而得到产生式:
消除直接左递归
消除方法:例如A->Aa|b这个产生式中有直接左递归,消除左递归后文法为A->b**A* A->aA|e(空产生式的符号)
构造的文法中以下产生式均含有直接左递归
消除左递归后的产生式:
至此左递归消除完毕
提取左因子
Component产生式中含有左因子Atom
将文法的各产生式写成扩展的巴科斯范式