实验1-4-《编译原理》词法分析程序设计方案_第1页
实验1-4-《编译原理》词法分析程序设计方案_第2页
实验1-4-《编译原理》词法分析程序设计方案_第3页
实验1-4-《编译原理》词法分析程序设计方案_第4页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验 1-4 编译原理 S 语言词法分析程序设计方案一、实验目的了解词法分析程序的两种设计方法:1. 根据状态转换图直接编程的方式;2. 利用DFA编写通用的词法分析程序。二、实验内容1根据状态转换图直接编程编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。源程序词法分析程序记号文件具体任务有:( 1)组织源程序的输入( 2)拼出单词并查找其类别编号 ,形成二元式输出,得到单词流文件( 3)删除注释、空格和无用符号( 4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错

2、误信息输出到屏幕上。(5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置, 否则返回0 并且填写符号表或常量表。标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。常量表结构:常量名,常量值2编写 DFA模拟程序算法如下:DFA( S=S0,MOVE ,F ,ALPHABET )/*S为状态,初值为DFA的初态, MOVE 为状态转换矩阵,F 为终态集, ALPHABET为字母表,其中的字母顺序与MOVE 中列标

3、题的字母顺序一致。*/Char Wordbuffer10=“” / 单词缓冲区置空Nextchar=getchar(); / 读i=0 ;while ( nextchar ! =NULL) /NULL 代表此类单词 if( nextchar ! ALPHABET) ERROR(“非法字符” ),return (“非法字符” );S=MOVESnextchar /下一状态if( S=NULL) return (“不接受”); / 下一状态为空,不能识别,单词错误wordbufferi=nextchar; /保存单词符号i+;nextchar=getchar();Wordbufferi=0 ;If

4、( S F)return(wordbuffer);/接受Else return(“不接受”);该算法要求:实现 DFA算法,给定一个 DFA(初态、状态转换矩阵、终态集、字母表) ,调用 DFA(),识别给定源程序中的单词,查看结果是否正确。三、实验要求1能对任何S 语言源程序进行分析在运行词法分析程序时,应该用问答形式输入要被分析的S 源语言程序的文件名,然后对该程序完成词法分析任务。2能检查并处理某些词法分析错误词法分析程序能给出的错误信息包括:总的出错个数, 每个错误所在的行号,错误的编号及错误信息。本实验要求处理以下两种错误(编号分别为1, 2):1:非法字符:单词表中不存在的字符处理

5、为非法字符,处理方式是删除该字符,给出错误信息,“某某字符非法” 。2:源程序文件结束而注释未结束。注释格式为:/* */四、保留字和特殊符号表单词代码123456789单词intcharfloatvoidconstforifelsethen单词助记intcharfloatvoidconstforifelsethen符内码值-单词代码101112131415161718单词whiswitbreakbegiend标识符数字(包lechn括整数和实数)单词助记whiswitbreakbegiendidnum符lechn内码值-在符号表在常数表中的位置中的位置单词代码1920212223242526

6、27单词+-*/%()单词助记 +-*/%()符内码值-单词代码28303536单词<><=>=!=%;单词助记rlop%;符内码值<><=>=!=-单词代码373839404142434445单词/=+=-=*=%=|&&!=单词助记/=+=-=*=%=orandnot=符内码值-单词的构词规则:字母 =A-Za-z数字 =0-9标识符 =(字母 |_ )(字母 | 数字) *数字 =数字 ( 数字 )*(.+数字| )四、 S 语言表达式和语句说明1算术表达式:+ 、- 、*、/ 、 %2关系运算符:>、 >=、&

7、lt;、 <=、=、! =3赋值运算符:=, +=、-= 、 *= 、/= 、 %=4变量说明:类型标识符变量名表;5类型标识符:intcharfloat6 If语句:if表达式then语句else语句 7 For语句:for(表达式1;表达式2;表达式3) 语句8 While语句:while表达式do语句9 S 语言程序:由函数构成,函数不能嵌套定义。函数格式为:返回值函数名(参数)begin数据说明语句end10复合语句构成begin语句序列end五、程序参考结构说明主函数InitscannerScannerLexscancloseIsalphaIsnumberIsanotation

8、IsotherOutputError1 Initscanner函数:程序初始化:输入并打开源程序文件和目标程序文件,初始化保留字表2 Scanner 函数:若文件未结束,反复调用lexscan函数识别单词。3 Lexscan 函数:根据读入的单词的第一个字符确定调用不同的单词识别函数4 Isalpha函数:识别保留字和标识符5 Isnumber 函数:识别整数,如有精力,可加入识别实数部分工功能6 Isanotation函数:处理除号/ 和注释7 Isother函数识别其他特殊字符8Output 函数:输出单词的二元式到目标文件,输出格式 (单词助记符, 单词内码值),如( int , - )

9、( rlop , >)9 Error函数:输出错误信息到屏幕10 除此之外,还可以设置查符号表,填写符号表等函数,学生可自行设计。六、实验过程说明1每人单独完成。2完成后,由老师验收,并给出成绩。3实验完成后,写出实验报告(要求交打印稿)。报告内容要求如下:完成人:班级、学号、姓名一、实验名称:简化S 语言词法分析器二、实验目的:通过手工编写简化 C 语言词法分析器,熟悉并深入理解编译程序词法分析器的工作原理。三、实验内容:1根据保留字和特殊符号表能区分出源文件中的保留字、普通标识符和特殊符号,并能进行简单的错误处理。2设计词法分析器模块调用结构图和各模块流程图。3程序源代码。4程序的执行结果:输入文件,输出结果文件及屏幕信息。四、实验中出现的问题及解决方法。七、实验时间地点安排共提供 4 次课上机时间,如上课不能完成,课下自行解决地点: 1,2 班 软 2 机房, 3,4 班软 3 机房时间:第三周周一2 单元周三周五2 单元2 单元第四周周一2 单元2009 年3月测试源程序示例:/aa.cvoid aa( )beginfloat rate,circle;rate=3;circle=3.14*rate*ra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论