编译原理实验报告2-词法分析程序的设计(共9页).doc





《编译原理实验报告2-词法分析程序的设计(共9页).doc》由会员分享,可在线阅读,更多相关《编译原理实验报告2-词法分析程序的设计(共9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验2 词法分析程序的设计一、实验目的掌握计算机语言的词法分析程序的开发方法。二、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求1、根据以下的正规式,编制正规文法,画出状态图;标识符 (|)*十进制整数0 | ((1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*)八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*运
2、算符和界符+ - * / = ( ) ;关键字if then else while do 2、根据状态图,设计词法分析函数int scan( ),完成以下功能:1) 从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,2) 以二元式形式输出单词其中单词种类用整数表示:0:标识符1:十进制整数2:八进制整数3:十六进制整数运算符和界符,关键字采用一字一符,不编码其中单词属性表示如下:标识符,整数由于采用一类一符,属性用单词表示运算符和界符,关键字采用一字一符,属性为空3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。四、实验环境PC微机DOS操作系统或 Windows 操
3、作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤1、 根据正规式,画出状态转换图;01字母空白字母或数字非字母与数字3194092非数字5061707非0778x909或af非09与af1011+ 或或* 或/ 或 或= 或 (或 ) 或 ;12if then else while do*非17与x09或af2、 根据状态图,设计词法分析算法;观察状态图,其中状态2、4、7、10(右上角打了星号)需要回调一个字符。声明一些变量和函数:ch:字符变量,存放最新读进的源程序字符。strToken:字符串变量,存放构成单词符号的字符串。GetChar():子函数,将
4、下一输入字符读到ch中,搜索指示器前移一字符位置。GetBC():子函数,检查ch中的字符是否为空白。若是,则调用GetChar()直至ch中进入一个非空白字符。Concat():子函数,将ch中的字符连接到strToken之后。IsLetter():布尔函数,判断ch中的字符是否为字母。IsDigit():布尔函数,判断ch中的字符是否为数字。Reserve():整型函数,对strToken中的字符串查找保留字表,若它是一个保留字则返回它的编码,否则返回0。SearchOp():整型函数,对ch查找运算符和界符,若它是一个运算符或界符,则返回它的编码,否则返回0。Retract():子函数,
5、将搜索指示器回调一个字符位置,将ch置为空白字符。ProError():错误处理函数。关键字保存在字符数组中,定义编码为相对数组首地址的位置 + 1。保留子表顺序如下: if ,then,else,while,do ,则相应编码为:1,2,3,4,5。运算符和界符保存在字符数组中,编码定义与关键字相同,顺序如下: + ,- , * , / , , , = , ( , ) , ;,编码为:110。二元表单词单词种类属性标识符0单词自身十进制整数1单词自身八进制整数2单词自身十六进制整数3单词自身运算符和界符单词自身-关键字单词自身-算法如下:ch= ;strToken=” ”;GetBC();i
6、f(IsLetter() while(IsLetter() | IsDigit() Concat();GetChar(); Retract();If(Reserve()printf(, strToken); else printf(, strToken);else if(1 =ch & ch =9) while(IsDigit() Concat();GetChar(); Retract();printf(, strToken) ; else if(ch=0) GetChar();if(ch = 1 & ch = 0 & ch = 7) Concat();GetChar(); Retract()
7、;printf(, strToken) ;else if(ch=x) GetChar();while(IsDigit() | ch= a & ch=f) Concat();GetChar(); Retract();printf(, strToken);else Retract();printf(“ “) ;else if(SearchOp() printf(, ch);else ProError();3、 采用C或C+语言,设计函数scan( ),实现该算法;char GetChar(FILE* fp) /读取文件中的一个字符char ch;ch = fgetc(fp);return ch;c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 词法 分析 程序 设计

限制150内