网站大量收购独家精品文档,联系QQ:2885784924

汇编语言词法分析(新).doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言词法分析(新)

数学与信息工程学院 《编译原理》 实验报告一 实验名称:词法分析 实 验 室:6202 班 级:09计算机3班 姓 名:沈春晖 学 号:0929210062 词法分析器的设计 实验目的 通过完成词法分析程序,了解词法分析的过程。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 实验环境 操作系统:window xp 编写环境:visual c++ 、c-free、turbo c 编写语言:c语言 分析语言:PL/0 实验内容 对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,其词法描述如下: 关键字:begin,call,const,do,end,if,odd,procedure,read,then,var,while,write 标识符:用来表示各种名字,必须以字母开头小于10位字符组成 数字:以0-9组成小于14位的数字 运算符:+,-,*,/,:=,,=,,= 界符:,,.,;,# 表1 各种单词符号对应类型表 单词符号 类型 + plus - minus * times / slash ( lparen ) rparen = eql , comma . perio # neq ; semicolon begin beginsym call callsym const constsym do dosym end endsym if ifsym odd oddsym procedure proceduresym read readsym then thensym var varsym while whilesym write writesym GETSYM函数功能: 滤空格 空格在词法分析时是一种不可缺少的界符,而在语法分析时则是无用的,所以必须过滤 识别保留字 主程序定义了一个以字符为元素的一维数组WORD,称保留字表。对字母开头的字母、数字字符串要查此表。若查着则识别为保留字,将对应的类别放在SYM中。如IF的对应值IFSYM,THEN的对应值为THENSYM。若查不着,则认为是用户定义的标识符 识别保留字 对用户定义的标识符将IDENT放在SYM中,标识符本身的值放在ID中 拼数 当扫描到数字串时,将字符串形式的十进制数转换为二进制数,然后把数的类别NUMBER放在SYM中,数值本身的值放在NUM中 拼合复合词 对两个字符组成的算符,如:=、:=、=等单词,识别后将类别送SYM中 输出源程序 为边读入字符边输出(可输出在文件中) 实验结果 要分析的内容如下: const a=35; var c,d; procedure p; begin var g; g:=465494366466564444; write(g); end; begin read(c,d); if c=d then c:=a; write(c,d); call p; end. 实验小结(心得体会) 刚开始的时候运行中报错,原因是函数的调用顺序出现错误,后经调试改正了。通过本实验的完成,更了解了此法分析的基本任务是从字符串表示的原程序中识别出具有独立意义的单词符号,其基本意思是根据少苗到单词符号的第一个字符的种类,拼出相应的单词符号。 附录:源代码 #includestdio.h #include string.h #define al 10 /*符号的最大长度*/ #define norw 13 /*关键字个数*/ #define namx 14 /*数字允许的最长位数*/ FILE *fin; FILE *fout; char fname[al],fwname[al],a[al+1]/*a[50]*/,id[al+1],sym[20]; static char sword[11]={+,-,*,/,(,),=,,,.,#,;}; static char ssym[11][al]={plus,minus,times,slash,lparen,rparen,eql,comma,period,neq,semicolon}; static char word[13][al]={begin,call,const,do,end,if,odd,procedure,read,then,var,while,write};//保留关键字 static char wsym[13][al]={beginsym,callsym,constsym,dosym,endsym,ifs

您可能关注的文档

文档评论(0)

tianma2015 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档