词法分析
思维导图
总结
词法分析程序的功能及实现方案
功能
- 词法分析:根据词法规则识别及组合单词,进行词法检查
- 删去空格字符和注释
- 对数字常数完成数字字符串到二进制数值的转换
实现方案
- 词法分析单独为一遍:
优点:结构清晰、各遍功能单一
缺点:效率低 - 词法分析为单独子程序:
优点:效率高
单词种类及词法分析程序的输出形式
单词种类
- 保留字:begin、end、for、do…
- 识别符:由用户定义,表示各种名字的字符串
- 常数:无符号数、布尔常数、字符串常数等
- 分界符或操作符:+、-、*、/、:、(、)、;…等
单词内部形式
- 单词种类分类:类别编码|单词值
- 保留字和分界符采用一符一类
- 标识符和常数的单词值又为指示字(指针值)(符号表中的地址)
正则文法及其状态图
左线性文法的状态图画法(重难点)
- 用结点(状态)表示G的非终结符,G的识别符号为终止状态(双圈)
- 设一个开始状态S
- 若Q ::= t , Q∈Vn, t∈Vt , 则画一条从状态S到状态Q的有向弧,且弧上标记为t
- 若Q::=Rt, Q、R∈Vn,t∈Vt, 则画一条从状态R 到状态Q的有向弧,且弧上标记为t
- 例子:正则文法以及其状态图
Z::= U0 |V1
U ::=Z1 | 1
V ::=Z0 | 0
句子识别算法(重点)
利用状态图可按如下步骤分析和识别字符串x:
- 置初始状态为当前状态,从x的最左字符开始,重复步骤2,直到x的右端为止
- 扫描x的下一个字符,在当前状态所射出的弧中找出标记有该字符的弧,并沿此弧过渡到下一个状态;如果找不到标有该字符的弧,那么x不是句子,过程到此结束;如果扫描的是x的最右端字符,并从当前状态出发沿着标有该字符的弧过渡到下一个状态为终止状态Z,则x是句子
词法分析程序的设计与实现
- 主要实现思想
- 文法及其状态图:
语言的单词符号:
1、标识符
2、保留符
3、无符号整数
4、单分界符+*/:,()
5、双分界符:=
- 状态图的实现——构造词法分析程序
1、单词及内部表示: 保留字和分界符采用一符一类
2、词法分析程序需要引用的公共(全局)变量和过程
3、词法分析程序算法