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

词法分析实验报告.docx

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

编译原理实验一 姓 名:朱彦荣学 号专 业:软件工程2 实验题目:词法分析 完成语言:C/C++ 上级系统:VC++6.0 日 期:2015/11/7 词法分析设计题目:手工设计c语言的词法分析器 (可以是c语言的子集)设计内容:处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。设计目的:了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。结果要求:课程设计报告。完成日期:第十五周提交报告分析要想手工设计词法分析器,实现C语言子集的识别,就要明白什么是词法分析器,它的功能是什么。词法分析是编译程序进行编译时第一个要进行的任务,主要是对源程序进行编译预处理(去除注释、无用的回车换行找到包含的文件等)之后,对整个源程序进行分解,分解成一个个单词,这些单词有且只有五类,分别是标识符、保留字、常数、运算符、界符。以便为下面的语法分析和语义分析做准备。可以说词法分析面向的对象是单个的字符,目的是把它们组成有效的单词(字符串);而语法的分析则是利用词法分析的结果作为输入来分析是否符合语法规则并且进行语法制导下的语义分析,最后产生四元组(中间代码),进行优化(可有可无)之后最终生成目标代码。可见词法分析是所有后续工作的基础,如果这一步出错,比如明明是‘=’却被拆分成‘’和‘=’就会对下文造成不可挽回的影响。因此,在进行词法分析的时候一定要定义好这五种符号的集合。下面是我构造的一个C语言子集。第一类:标识符 letter(letter | digit)* 无穷集第二类:常数 (digit)+ 无穷集第三类:保留字(32)auto break case charconst continuedefault do double elseenum externfloat forgoto ifint longregister return short signedsizeof staticstruct switchtypedef union unsigned voidvolatile while第四类:界符 ‘/*’、‘//’、 () { } [ ] 等第五类:运算符 、=、、=、=、+、-、*、/、^、等对所有可数符号进行编码:$,0auto,1...while,32+,33-,34*,35/,36,37=,38,39=,40=,41==,42!=,43;,44(,45),46^,47,,48,49,50#,51,52,53|,54||,55%,56~,57,58左移,59右移[,60],61{,62},63\,64.,65?,66:,67!,68[,],{,}常数99 ,数值标识符100 ,标识符指针上述二元组中左边是单词的符号,右边为其种别码,其中常数和标识符有点特别,因为是无穷集合,因此常数用自身来表示,种别码为99,标识符用标识符符号表的指针表示(当然也可用自身显示,比较容易观察),种别码100。根据上述约定,一旦见到了种别码syn=63,就唯一确定了‘}’这个单词。下面是一些变量的约定://全局变量,保留字表static char reserveWord[32][20] = {auto, break, case, char, const, continue,default, do, double, else, enum, extern,float, for, goto, if, int, long,register, return, short, signed, sizeof, static,struct, switch, typedef, union, unsigned, void,volatile, while};//界符运算符表,根据需要可以自行增加static char operatorOrDelimiter[36][10]={ +,-,*,/,,=,,=,=,==, !=,;,(,),^,,,\,\,#,, ,|,||,%,~,,,[,],{, },\\,.,\?,:,!};static char IDentifierTbl[1000][50]={};//标识符表char resourceProject[10000];//输入的源程序存放处,最大可以存放10000个字符。char token[20]={0};//每次扫描的时候存储已经扫描的结果。int syn=-1;//syn即为种别码,约定‘$’的种别码为0,为整个源程序的结束符号一旦扫描到这个字符代表扫描结束int pProject = 0;//源程序指针,始终指向当前源程序待扫描位置。

文档评论(0)

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

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

1亿VIP精品文档

相关文档