这是我参与更文挑战的第23天,活动详情查看: 更文挑战
第四章:语法分析
4.1、语法分析分类
- 自顶向下:分析
- 自底向上:简单优先分析、算符优先分析、分析
4.2、确定的自顶向下分析思想(不确定不考虑)
-
**First集:**产生式右部第一个终结符集
-
**Follow集:**非终结符右边紧跟着的终结符集
-
Select集:
- A->,(,) 不能推出空字符,则:
- 如果能够推出空字符,则:
4.3、判断是否为文法的充要条件
任何两个产生式的Select集的交集为空
4.4、的含义
- 第1个L表示自顶向下分析是从左到右扫描输入串
- 第2个L表示分析过程中将用最左推导
- 1表示只需向右看一个符号便可决定如何推导(即:选择哪个产生式进行推导)
类似的还有文法
4.5、**文法的判别
- 求出所有能推出 的非终结符(直到所有的非终结符都能判断出是否能推出 时结束)
- 计算First集合
- 计算Follow集合
- 计算Select集合
例题:
4.6、文法的充要条件
- 无左公共因子
- 无左递归
- 无产生式
非文法
- 含有左递归
- 含左公共因子
不一定所有的语言都有文法,左递归和左公共因子不能全消除(考判断题)
也就是不是所有的非文法可以转换为文法
4.7、含有左递归的文法绝对不是文法(判断题)
4.8、左递归
- 直接左递归:
- 间接左递归:
4.9、消除左递归
消除直接左递归:
,
消除间接左递归:
例如:
- A->aB
- A->Bb
- B->Ac
- B->d
间接左递归–>直接左递归:
- B->aBc
- B->Bbc
- B->d
消除直接左递归:
- B->dB’
- B->aBcB’
- B’->bcB’
- B’->
4.10、**表驱动分析程序
解题步骤:
- 判断文法是否为文法
- 构造预测分析表
组成部分:
- 预测分析程序
- 先进后出栈
- 预测分析表
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END