- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法分析器
本程序从一个磁盘文件上读入一个C源程序,将其翻译成一个由单词内部码表示的C程序。
把C单词分成如下几类:
保留字(例如:for、if、int、struct等)
分隔符 (例如:(、 # 、 .、\ 、 ;等)
运算符 (例如:+ 、- 、* 、\ 、 等)
标识符(例如:color、main、i、f等)
常量,包括整数类型常量、浮点类型常量、字符类型常量、字符串类型常量。
对不同类单词编码如下:
保留字:
0
编号
分隔符:
1
编号
运算符:
2
编号
标识符:
3
标识符名表地址
整数类型常量:
4
0
整数类型常量表地址
浮点类型常量:
4
1
浮点类型常量表地址
字符类型常量:
4
2
字符类型常量表地址
字符串类型常量:
4
3
字符串类型常量表地址
其中:
保留字、分隔符、运算符编号可以由读者自己决定。但对处理的所有C源程序来讲每个符号的编号应该一致。
在处理源程序过程中应该造一个标识符名表,保存本源程序中出现的所有标识符。标识符单词中的标识符名表地址就是相应标识符在该表中的地址。
在处理源程序过程中应该分别造整数类型常量表、浮点类型常量表、字符类型常量表、字符串类型常量表,保存本源程序中出现的所有常量。常量单词中的常量表地址就是相应常量在相应常量表中的地址。
能对宏定义、文件括入进行编译预处理。宏定义的字符串全部被替换;括入文件中的内容与源程序文件中内容同样处理。
定义C的所有保留字、分隔符、运算符编码,造出编码表,编出C语言单词翻译程序。该程序输入一个C语言源程序;根据输入的C语言源程序造出标识符表、各种常量表;把输入的C语言源程序翻译成与其等价的内部码程序。
请分别用数组、链表、树等数据结构组织各种表格并分别编出程序,最后输出经过翻译的与源程序等价的内部码程序和所有表格,而且要对C单词进行语法检查。
所谓内部码程序就是一个单词编码序列,其中每个单词编码对应源程序中的一个单词。例如有如下源程序:
#include stdio.h
void main() {
union un {
int a;
char c[2];
}w;
w.c[0]=’A’; w.c[1]=’a’;
printf(“%o\n”,w.a);
}
翻译后得到的内部码程序如下边左列所示。为了对照起见我们将相应源程序单词附在右边,但它们不属于内部码程序:
Stdio.h 文件中的程序代码部分
#include stdio.h
0
35
void
3
1
main
1
2
(
1
3
)
1
11
{
0
33
union
3
2
un
1
11
{
0
22
int
3
3
a
1
8
;
0
5
char
3
4
c
1
4
[
4
0
1
2
1
5
]
1
8
;
1
12
}
3
5
w
1
8
;
3
5
w
2
11
.
3
4
c
1
4
[
4
0
2
0
1
5
]
2
8
=
4
2
1
‘A’
1
8
;
3
5
w
2
11
.
3
4
c
1
4
[
4
0
3
1
1
5
]
2
8
=
4
2
2
‘a’
1
8
;
3
6
printf
1
2
(
4
3
1
“%0\n”
1
6
,
3
5
w
2
11
.
3
3
a
1
3
)
1
8
;
1
12
}
分别假设:
本程序涉及的保留字编码如下:
保留字
编码
include
21
void
35
union
33
int
22
char
5
本程序涉及的分隔符编码如下:
分隔符
编码
#
1
(
2
)
3
{
11
}
12
[
4
]
5
,
6
;
8
本程序涉及的运算符编码如下:
运算符
编码
.
11
=
8
本程序涉及的标识符表如下:
标识符
地址
main
1
un
2
a
3
c
4
w
5
printf
6
由程序造的整数类型常量表如下:
整数类型常量
地址
2
1
0
2
1
3
由程序造的浮点类型常量表如下:
浮点类型常量
地址
由程序造的字符类型常量表如下:
字符类型常量
地址
‘A’
1
‘a’
2
由程序造的字符串类型常量表如下:
字符串类型常量
地址
“%0\n”
1
原创力文档


文档评论(0)