实验1-3-《编译原理》词法分析程序设计方案

上传人:博****1 文档编号:494119729 上传时间:2022-12-18 格式:DOCX 页数:11 大小:56.55KB
返回 下载 相关 举报
实验1-3-《编译原理》词法分析程序设计方案_第1页
第1页 / 共11页
实验1-3-《编译原理》词法分析程序设计方案_第2页
第2页 / 共11页
实验1-3-《编译原理》词法分析程序设计方案_第3页
第3页 / 共11页
实验1-3-《编译原理》词法分析程序设计方案_第4页
第4页 / 共11页
实验1-3-《编译原理》词法分析程序设计方案_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《实验1-3-《编译原理》词法分析程序设计方案》由会员分享,可在线阅读,更多相关《实验1-3-《编译原理》词法分析程序设计方案(11页珍藏版)》请在金锄头文库上搜索。

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

2、一个标识符或常量时,查找标识符表或常量表,假设存在,则返回位置,否则返回0 并且填 写符号表或常量表。标识符表结构:变量名,类型整型、实型、字符型,分配的数据区地址 注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐 步填入。常量表结构:常量名,常量值三、实验要求1 能对任何S语言源程序进行分析在运行词法分析程序时,应该用问答形式输入要被分析的 S 源语言程序的文件名,然 后对该程序完成词法分析任务。2能检查并处理某些词法分析错误 词法分析程序能给出的错误信息包括:总的出错个数,每个错误所在的行号,错误的编 号及错误信息。本实验要求处理以下两种错误编号分别为1,2:

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

4、置单词代码192021222324252627单词+-*/%()单词助记符+-*/%()内码值-单词代码28282930单词!=单词助记符rlop内码值!=-单词代码373839404142434445单词/=+=-=*=%=II&!=单词助记符/=+=-=*=%=orandnot=内码值-单词的构词规则:字母=A-Za-z数字=0-9 标识符=字母|_字母|数字* 数字=数字(数字)*(.数字+| )四、S语言表达式和语句说明1算术表达式:+、 -、 *、 /、 % 2关系运算符:、 =、 、 =、 =、!= 3赋值运算符:=,+=、 -=、 *=、 /=、 %= 4变量说明:类型标识符 变

5、量名表;5. 类型标识符:int char float6. If语句:if 表达式then 语句 else 语句7. For语句:for表达式1;表达式2;表达式3语句8. While 语句: while 表达式 do 语句9. S 语言程序:由函数构成,函数不能嵌套定义。 函数格式为:返回值 函数名参数数据说明语句五、程序参考结构说明1Initscanner 函数:程序初始化:输入并打开源程序文件和目标程序文件,初始化保 留字表2Scanner 函数:假设文件未结束,反复调用 lexscan 函数识别单词。3Lexscan 函数:根据读入的单词的第一个字符确定调用不同的单词识别函数4Isal

6、pha 函数:识别保留字和标识符5Isnumber 函数:识别整数,如有精力,可加入识别实数部分工功能6Isanotation 函数:处理除号/和注释7Isother 函数识别其他特殊字符8Output 函数:输出单词的二元式到目标文件,输出格式单词助记符,单词内码值, 如int, -rlop, 9. Error函数:输出错误信息到屏幕10除此之外,还可以设置查符号表,填写符号表等函数,学生可自行设计。实验中,可以将某些类型的单词识别过程利用 DFA 算法实现, DFA 算法参考如下:DFA S=S0,MOVE,F,ALPHABET, ALLS/*S为状态,初值为DFA的初态,MOVE为状态转

7、换矩阵,F为终态集,ALPHABET 为字母表,其中的字母顺序与MOVE中列标题的字母顺序一致。ALLS为状态集*/Char Wordbuffer10= “” 单词缓冲区置空Nextchar=getchar; 读字符i=0;while nextchar!=NULL; /NULL 代表此类单词 if nextchar!WALPHABET; ERROR “非法字符”;,return “非法字符”;S=MOVESnextchar /下一状态ifS=NULLreturn “不接受”;下一状态为空,不能识别,单词错误wordbufferi=nextchar ;/保存单词符号i+;nextchar=get

8、char;Wordbufferi=0;IfSWF; returnwordbuffer;接受Else return “不接受”;六、实验过程说明1每人单独完成。2完成后,由老师验收,并给出成绩。3实验完成后,写出实验报告要求交打印稿。报告内容要求如下:完成人:班级、学号、一、实验名称:简化S语言词法分析器二、实验目的:通过手工编写简化C语言词法分析器,熟悉并深入理解编译程序词法分 析器的工作原理。三、实验内容:1. 根据保留字和特殊符号表能区分出源文件中的保留字、普通标识符和特殊符号,并 能进行简单的错误处理。2. 设计词法分析器模块调用结构图和各模块流程图。3. 程序源代码。4程序的执行结果:

9、输入文件,输出结果文件及屏幕信息。四、实验中出现的问题及解决方法。五、体会、意见或建议。七、测试源程序例如:void aa( )float rate,circle; rate=3;circle=3.14*rate*rate;输出结果:1;输出结果文件:void,-(id, 0)(,-)(),-)(,-)( float,-) (id,1).2;标识符的符号表:23453常数表:NametypeaddressaaratecirclevalueName实验地点:教10五楼电脑学院软一机房实验时间:第 4周周二3单元、周四 1单元、第五周周二3单元八、实验代码#include#include#incl

10、ude#include #define MAX 10/保留字符号长度#define MAXSIZE 45/保留字和特殊符号表长度#define NUM 30/标识符和常数的个数FILE *in,*out;/ 指向文件的指针char infileMAX;文件名字char tokenMAX;char WordNUMMAX;/标识符char constsNUMMAX; 常数char lownumNUMMAX=0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,1920,21,22,23,24,25,26,27,28,29;/自定义表int n=1;/行 号int

11、num=0; /错误统计数 typedef struct Key_word保留字和特殊符号表结构/int keyNum;char keyWordMAX; char keySignMAX;char keyValueMAX;Key_word;/初始化保留字表Key_word KeyMAXSIZE=int,int,-,char,char,-,float,float,-,void,void,-,const,const,-,for,for,-, if,if,-,else,else,-,then,then,-, while,while,-,switch,switch,-,break,break,-, begin,begin,-,end,end,-, ,id,num, +,+,-,-,-,-,*,*,-, /,/,-,%,%,-,(,(,-, ),),-,-,-, ,rlop,rlop, =,rlop,=,rlop,=,=,rlop,=, !=,rlop,!=,;,;,-, /=,/=,-,+=,+=,-,-=,-=,-, *=,*=,-,%=,%=,-,|,or,-, &,and,-,!,not,-,=,=,-;/打开关闭文件 int Initscanner()

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

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号