高级语言程序设计_张长海_词法分析器.docVIP

高级语言程序设计_张长海_词法分析器.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档