c语言词法分析器的简单实现 词法分析器的设计与实现.docx

上传人:w**** 文档编号:9814545 上传时间:2022-04-06 格式:DOCX 页数:7 大小:31.81KB
返回 下载 相关 举报
c语言词法分析器的简单实现 词法分析器的设计与实现.docx_第1页
第1页 / 共7页
c语言词法分析器的简单实现 词法分析器的设计与实现.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《c语言词法分析器的简单实现 词法分析器的设计与实现.docx》由会员分享,可在线阅读,更多相关《c语言词法分析器的简单实现 词法分析器的设计与实现.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、c语言词法分析器的简单实现 词法分析器的设计与实现(内蒙古财经学院 计算机信息管理学院,内蒙古 呼和浩特 010151)摘 要:介绍了词法分析器的概念,并指出词法分 析器设计时,输入的源程序以文件的形式存储在外部。主控程序通过打开文件调用待分析的 源程度。关键词:词法分析器;正规式;自动机中图分类号:TP391 文献标识码:A 文章编号:10176921(2022)14022302词法分析是编译程 序进行翻译的第一个阶段,他对程序进行线性分析,从字符串中分出单词,并检查所分出的 单词是否为合法的词类。编译中的分词思想在“文本格式化”及“公式排版”中应用的比较 广泛,是一种好用性很强的分析方法。

2、词法分析顾名思义就是分词。它以程序设计语言编制的源程序作为输入,以单词序列作为输 出。分词过程可以通过编制程序自动完成,我们通常称这个分词程序为词法分析器。词法分 析器分析的源程序可以是现有的各类程序设计语言源程序也可以是人为给定的模型语言的源 程序。本文中的源程序为后者。1 词法分析器的设计词法分析在教学上的主要应用是对源程序进行分词同时验证词的合法性,词法分析的输入是 给定的模型语言,输出为单词序列。输入的源程序可以看成是一个字符串序列,通过把源程 序看作字符串序列就可以采纳形式语言的一些现有理论处理相关的编译问题。分词的输出为 单词序列,单词是一个有共同含义的字符集。由于程序设计语言中通

3、常运用空格来分割不同 的词,因此初学者在理解这一概念时可以简洁的把空格分隔开的字符串认为是一个单词。词法分析器设计时,输入的源程序以文件的形式存储在外部。主控程序通过打开文件调用待 分析的源程序。我给定的模型语言如图4。从词的角度来看,它涉及的内容较为简洁,只包括几个较为常用 的词类,词类的构成上也适当的作了一些简化。对词进行分析时,我们是按类型进行分析的 。不同类型的词在后续的分析中所起的作用不同,相应的操作也各有不同,但同种类型中的 词虽然单词的构成不同但从宏观上看它们的操作大体一样。模型语言中的单词可以分为“关 键字”、“标识符”、“常数”、“分隔符”、“运算符”几类。一般,关键字在程序

4、设计 语言中人为给定。程序设计时采纳一字一码的形式处理。标记符为一类,不同的标记符通过 值区分。常数只给出详细的值即可。依据以上的分析可以相应的设计如下的存储结构。关键字可以设计为一个预先存储好的表格。标记符和常数的逻辑结构设计如下:struct TokenTokenJX*2-JX-*2Type tchar *ch ;和struct TokenTokenJX*2-JX-*2Type tdouble value; ;每个类型中的单词都有它的构成规则。符合构成规则的即为合法的类型,否则,为不合法。 下面给出部分词类的正规式描述。<标识符><字母> (<字母>&l

5、t;数字>)*<无符号整数>=<数字>(数字)*<分隔符>=;| n|<运算符>=+|-|*|/<赋值运算符>=:= 正规式是一种常用的描述单词的手段。它简洁、清楚。能清晰地描述出单词的构成。并且可 以便利的转化为单词的识别装置自动机。依据给定的正规式得到的自动机如图。740)this.width=740 border=undefined onmousewheel=return zoom_img(event,this)740)this.width=740 border=undefined onmousewheel

6、=return zoom_img(event,this)自动机是从识别的角度来看待单词。通过人为的在自动机(本质上是一个有向图)上找一条从 起点到终点的路径就可以确定某个单词是否为合法的单词。自动机的另一个特点是可以特别 便利的转化为程序。我们可以将每类单词连接成为只有一个入口一个出口的自动机。连接后 的自动机如下图4。740)this.width=740 border=undefined onmousewheel=return zoom_img(event,this)该图已经确定化。为了提高效率,还可以将图最小化,即合并等价状态,削减状态总数。最 小化后的状态图可以很便利的翻译为程序

7、代码,而且效率较高。最终用干脆转向法实现有限 自动机,生成词法分析程序。词法分析程序识别某类单词的部分代码如下。 token.ch=Buffer; for(;) Char=GetChar(); if(Char= n) LineNo+; if(!isspace(Char)break; /假如字符不为空结束取一个字符 AddCharTokenString(Char); if(isalpha(Char) for(;) Char=GetChar(); if(isalnum(Char)AddCharTokenString(Char); else break; BackChar(Char); t=Judg

8、e (Buffer); token.ch=Buffer; return t; else if(isdigit(Char) for(;) Char=GetChar(); if(isdigit(Char)AddCharTokenString(Char); else break; BackChar(Char); token.type=CONSTJX*2-JX-*2ID; token.value=atof(Buffer); return token; else switch(Char) case;:token.type=SEMICO;break; case,:token.type=COMMA;brea

9、k; case+:token.type=PLUS;break; default:token.type=ERRTOKEN;break; 2 词法分析器设计留意的问题词法分析器设计还须要留意以下问题。在设计程序时,须要为源程序设计一个符号表,符号表用来保存标识符信息,为单词语法分 析和语义分析服务。验证了单词的合法性后,可以将单词放入符号表中,符号表中的表项除 了类型名和数值以外还须要添加一些其他项目。语法分析、语义分析时,从符号表中读取单 词信息,将其他后继处理的信息放入空白表项中保存。另外在处理过程中可能遇到“超前搜寻”问题。当读入一个字符时,循环结束,不进行相关 操作。下一次对字符操作前是要

10、将多读入的字符回退。3 结语词法分析在整个编译器设计中处于初级阶段,词法分析器的设计与实 现相对其他几个阶段来说比较简洁。本文中所提到的词法分析器的设计还有待于进一步改进 。如为了实现快速的表搜寻,可以引入散列来设计各类须要存储的表等。参考文献1 陈火旺,刘春林.程序设计语言编译原理 M.北京:国防工业出版社,2000.2 Alfred VAno,Ravi Sethi,Jeffrey DUllman,编译原理M.机械工业出 版社,2003.3 张素琴,吕映芝,蒋维杜,等.编译原理M.北京:清华高校出版社,2022. 第7页 共7页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页第 7 页 共 7 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁