没有合适的资源?快使用搜索试试~ 我知道了~
涉及到词法分析的实验内容、以及实现的源代码
资源详情
资源评论
资源推荐
编译原理实验参考
实验二 手工生成 语言词法分析器
1. 实验目的
掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理。
2. 实验要求
a) 手工编制 C 语言词法分析函数;每调用此函数一次,从当前待编译文件中识别出一
单词,并给出其类型和值。
b) 实验前请仔细阅读实验预习提示,提示中程序仅供参考。
c) 本实验建议上机时间 4-6 学时。
3. 实验预习提示
a) 词法分析器的功能和输出格式
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表
示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是一符一
种别码的方式。
b) 单词的 EBNF(扩展巴科斯范式)表示
下面是对 PL/0 进行词法分析所用到的部份 EBNF。
<标识符>::= <字母>{<字母>|<数字>|<下划线>}
<无符号整数>::= <数字>{<数字>}
<加法运算符>::= +
<减法运算符>::= -
.
.
.
<大于关系运算符>::= >
<大于等于关系运算符>::= >=
.
.
.
c) 3、“超前搜索”方法
词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“a>+,当前字符
为’>’,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符
呢?显然,只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符’
+’,这时可知应将’>’解释为大于运算符。但此时,超前读了一个字符’+’,所以要
回退一个字符,词法分析器才能正常运行。在分析标识符,无符号整数等时也有
类似情况。
4、参考源程序
[1]Basedata.h
!"#
[2]Symbol.h
$%
$%
&'()*+,-./
&'()*+'-./
0%!122保留字个数
$3"!422标识符最长长度
$%$122种别码个数
+56(7$%
8%9"!9$99$"9"$99
%!!$9:9:99:9;9;:99
9%$$9$"%%9"%!9%$9
;"$9!$9"$9$90"$9
0"$9!$9!%$9$9%$9
<$9%$=$%>22定义种别码
?,;+&.@AB?,C>
22取下一个字符
?,;+&B?,C>
22如当前字符为白字符,则读字符至不为白字符时停止
?,,&@+B?,C>
22将当前字符加入 +,D 字
?,+A@&+B?,C>
22回退一字符
+*A?B?,C>
22判断 +,D 字中单词是否是保留字
+;+*57B?,C>
22从当前文件中识别出一单词,并给出其类型和值
?,AA,A*57B?,C>
22打印错误信息
[3]Symbol.c
&'(E@*@[email protected]
&'(E*57,'-.E
&'()&,,-./
&'()*+AF-./
&'()&+56-./
&.@AG0%!H0%!IJ8E;"E9EE9E%E9E!%E9
E!E9E"E9E%!!E9E%!E9
E!E9EE9E<E9E0"E9
E0"E
=>22保留字字符串表9用于将保留字种别码转为字符串输出
$%0$H0%!IJ8;"$9$9%$9
!%$9!$9"$9%!!$9
%$9!$9$9
<$90"$90"$=>22保留字种别码表
&.@AG$H$%$IJ
8E%E9E"!E9E$E9EE9E$"E9E"$E9
EE9E%!!$E9E:E9E:E9EE9E:E9E;E9
E;:E9EE9EE9E%$$E9E$"%%E9
E"%!E9E%$E9E;"$E9E!$E9E"$E9
E$E9E0"$E9E0"$E9E!$E9
E!%$E9E$E9E%$E9E<$E9E%$E=>
22单词字符串表9用于将保留字种别码转为字符串输出
$%*57>22最近已识的单词种别码
&.@A+,DH$3"!KI>22最近已识别的单词
+(7>22最近已识别的数字值
剩余16页未读,继续阅读
baibaino1
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0