1 / 39
文档名称:

编译实验报告词法分析.doc

格式:doc   大小:408KB   页数:39页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译实验报告词法分析.doc

上传人:一花一世 2019/3/20 文件大小:408 KB

下载得到文件列表

编译实验报告词法分析.doc

相关文档

文档介绍

文档介绍:螂编译原理实验一·词法分析蚀螈莆螂肀蒀肅袂蒁袈袄羂袂蚀袇肁罿实验目的肈通过动手实践,使学生对构造编译系统的基本理论、编译程序的基本结构有更为深入的理解和掌握;使学生掌握编译程序设计的基本方法和步骤;能够设计实现编译系统的重要环节。同时增强编写和调试程序的能力。蚆膁实验内容及要求莀对某特定语言A,构造其词法规则。螀该语言的单词符号包括:蒅保留字(见左下表)、标识符(字母大小写不敏感)、整型常数、界符及运算符(见右下表)。蒅螁 功能要求如下所示:芈·按单词符号出现的顺序,返回二元组序列,并输出。蒈·出现的标识符存放在标识符表,整型常数存放在常数表,并输出这两个表格。薅·如果出现词法错误,报出:错误类型,位置(行,列)。膂·处理段注释(/**/),行注释(//)。羀·有段注释时仍可以正确指出词法错误位置(行,列)。芇蚅实验过程薃词法形式化描述蒇使用正则文法进行描述,则可以得到如下的正规式:肅其中ID表示标识符,NUM表示整型常量,RES表示保留字,DEL表示界符,OPR表示运算符。螅A→(ID|NUM|RES|DEL|OPR)*蝿ID→letter(letter|didit)*腿NUM→digitdigit*螄letter→a|…|z|A|…|Z袅digit→0|…|9膀RES→program|begin|end|var|int|and|or|not|if|then|else|while|do薇DEL→(|)|.|;|,袇OPR→+|*|:=|>|<|=|>=|<=|<>羅如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一个空格作间隔。空格由空白、制表符和换行符组成。薁荿单词种别定义;薆A语言中的单词符号及其对应的种别编码如下表所示:肄单词符号羂种别编码螇单词符号莅种别编码肄program聿1葿+膄16膄begin蒀2羇****17芄end袁3虿(羆18莄var节4肆)蚄19蒄int蚂5袈,:=芅22蚃not蚁8螀;肄23螃if肂9膈>肇24袃then腿10袀<袆25羃else薀11莈=蚅26肃while羁12聿>=蚈27膃do莁13蒇<=蒆28膃标识符螂14艿<>膅29芃整型常量罿15蚇-羄30莂莀状态转换图;荿语言A的词法分析的状态转换图如下所示:羇空格符,制表符蒂或回车符字母或数字螁袇非字母或数字螆2薂字母膂0蕿薅1蚂薃肆数字薈螂非数字蚀3螈莆螂+肀蒀4肅数字袂5蒁袈8袄7羂袂*蚀袇6肁3罿3肈蚆膁(莀螀蒅蒅)螁芈蒈22薅24膂非=羀其他芇-蚅14薃25蒇138肅12螅)蝿:腿>螄9袅,=袇10羅11薁15荿;薆/肄16羂=螇28莅/肄*聿26葿27膄其他膄23蒀=羇17***18芄>袁19虿非=羆<莄=节21肆20蚄蒄蚂袈螇薄衿薀蒆蚄芀羈芅蚃蚁螀肄螃肂膈肇袃腿袀袆羃薀莈蚅肃羁聿蚈膃莁蒇蒆膃螂艿膅芃罿蚇25羄其他莂运行环境介绍;莀本次实验采用win-tc进行代码的编写和编译及运行荿程序的运行环境为windows羇蒂关键算法的流程图及文字解释;螁程序中用到的函数列表:袇变量ch储存当前最新读进的字符的地址螆strToken存放当前字符串薂voidmain()//主函数膂structbinary*lexicalAnalyze();//词法分析的主函数,返回一个二元组的指针蕿voidGetBC();//检查ch指向的字符是否为空格、制表或回车符,如果是则调用GetChar()直至不是上述字符薅voidGetChar();//ch前移一个地址单元蚂intConCat();//将ch指向的字符连接到strToken之后薃intisLetter();//判断ch指向的字符是否字母肆intisDigit();//判断ch指向的字符是否数字薈intinsertId();//向标识符表中插入当前strToken的字符串螂intinsertConst();//将strToken的常数插入常数表中蚀intReserved();//检测当前strToken中的字符串是否保留字,若是,则返回编码,否则返回0螈intisId();//检测当前strToken中的字符串是否在标识符表中已存在,若是,则返回其编号,否则返回0莆intisConst();//检测当前strToken中的字符串是否在常数表中已存在,若是,则返回其编号,否则返回0螂voiderrProc(interrType);//出错处理过程,errType是错误类型,将错误信息加入错误表中肀蒀main()函数的流程图如下:肅袂蒁开始袈袄羂程序的初始化操作:将文件的内容读入内存;保留字、标识符、常数和错误表初始化;ch指针初始化袂蚀袇肁罿肈蚆若有错误发生,则跳至下一个单词开始,否则输出二元组膁莀螀蒅蒅执行LexicalAnalyze()螁芈否