- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
--
实验 1-3 《编译原理》
一、实验目的
了解词法分析程序的两种设计方法之一
二、实验内容
S 语言词法分析程序设计方案
:根据状态转换图直接编程的方式 ;
?1 .根据状态转换图直接编程
编写一个词法分析程序, 它从左到右逐个字符的对源程序进行扫描, 产生一个个的单词
的二元式 ,形成二元式 (记号 )流文件输出。 在此 ,词法分析程序作为单独的一遍, 如下图所示。
源程序 词法分析程序 二元式文件
具体任务有 :
(1) 组织源程序的输入
(2)拼出单词并查找其类别编号 ,形成二元式输出 ,得到单词流文件
(3)删除注释、空格和无用符号
(4) 发现并定位词法错误, 需要输出错误的位置在源程序中的第几行。 将错误信息输出到
屏幕上。
(5)对于普通标识符和常量 ,分别建立标识符表和常量表 (使用线性表存储) ,当遇到一个
标识符或常量时 ,查找标识符表或常量表 ,若存在 ,则返回位置, 否则返回 0 并且填写符号表或
常量表。
标识符表结构:变量名 ,类型(整型、实型、字符型) ,分配的数据区地址
注:词法分析阶段只填写变量名 ,其它部分在语法分析、语义分析、代码生成等阶段逐步 填入。
常量表结构 :常量名 ,常量值
三、实验要求
1 . 能对任何 S 语言源程序进行分析
在运行词法分析程序时,应该用问答形式输入要被分析的 后对该程序完成词法分析任务。
2 . 能检查并处理某些词法分析错误
词法分析程序能给出的错误信息包括: 总的出错个数,
号及错误信息。
S 源语言程序的文件名,然
每个错误所在的行号, 错误的编
本实验要求处理以下两种错误 (编号分别为 1,2 ):
?1:非法字符 :单词表中不存在的字符处理为非法字符, 处理方式是删除该字符 ,给出错误信息 ,
“某某字符非法” 。
2:源程序文件结束而注释未结束。注释格式为: /* …… */
四、保留字和特殊符号表
单词代码
单词
单 词 助 记 符
内码值
1
int
int
-
2
char
char
-
3
float
float
-
4
vo i
d
v o i d
-
5
cons t
c on s t
-
6
f o r
fo r
-
7
if
if
-
8
el se
el se
-
9
then
th e n
-
单词代码
单词
10
w h
11
switc h
12
break
13
begi
1 4
end
15 16 17
标识符
1 8
数字(包
--
括整数和 实数) num
括整数和 实数) num
3 8
+= +=
-
3 9
- =
- =
-
4 0
*= *=
-
41
%= %=
-
--
单 词 助 记
符
内码值
ile
while switch
- -
b r ea k
-
n
b
g
n
-
e e n d id
i
- 在符号表 中的位置
在常数表 中的位置
单词代码
单词
单 词 助 记
符
内码值
1 9
+
+
-
20
-
-
-
2 1
*
*
-
22
/
/
-
23
%
%
-
2 4
(
(
-
2 5
)
)
-
2 6
[
[
-
27
]
]
-
单词代码
单词
单 词 助 记
符
内码值
! =
r l o p
! =
28 28 29 30
= = == ; { }
; {
原创力文档


文档评论(0)