- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中环信息学院实验报告
学院(系)名称:计算机工程系
姓名 *** 学号 ****** 专业 软件工程 班级 ****级班
实验目的:
1.掌握程序设计语言词法分析的设计方法;
2.掌握DFA的设计与使用方法;
3.掌握正规式到有限自动机的构造方法;
实验要求
基本字、运算符、界符:一符一种;
标识符:统一为一种;
常量:按类型编码;
2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出;
3.词法分析的最后结果以文本文件形式输出;
4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果;
5.为增加程序可读性,请在程序中进行适当注释说明;
6.整理上机步骤,总结经验和体会;
7.认真完成并按时提交实验报告。
一、实验原理:
1、词法分析程序的算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
2、程序流程图
(1)主程序:
(2)扫描子程序:
3、程序中用到的函数及变量说明
CH字符变量:用来存放最新读进的字符。
Token 字符数组:存放构成单词的字符串。
GetCH( ) 字符数组:存放构成单词的字符串。
GetBC( ) 函数:检查CH中的字符是否为空格,若是,则调用GetCH直到CH中为一非空格。
Concat ( ) 函数:把CH中的字符连接到Token中。
Letter( ) 和Digit( ) 函数:分别判断CH中的字符是否为字母和数字。
Reserve( ) 函数:对Token中的字符串查找关键字表,若它是一个关键字则回送相应内部编码,否则回送0。
Retract( ) 函数:把源程序缓冲区指针回退一个字符位置,并把CH置空白。
Buildlist()函数:将标识符登录到符号表或将常数登录到常数表。
Error()函数:出现非法字符,显示错误信息。
4、词法规则要求:
①识别保留字:if、int、else、for、while、do、return、break、continue;单词种别码为1。②其他的都识别为标识符, 标识符由字母开头,后面可以是数字、字母和下划线;单词种别码为2。
③常数为无符号整形数, 无符号的整数由数字开头,后面只包含数字;单词种别码为3。
④运算符包括:+、-、*、/、=、、、=、=、 ;单词种别码为4。
⑤分隔符(界符)包括:,、;、{、}、(、); 单词种别码为5。
5、各种单词符号对应的种别码:
单词符号 种别码 助记符 内码值 while 1 while - if 2 if - else 3 else - switch 4 switch - case 5 case - 标识符 6 id id在符号表中的位置 常数 7 num num在常数表中的位置 + 8 + - - 9 - - * 10 * - = 11 relop LE 11 relop LT == 11 relop EQ = 12 = - ; 13 ; - 二、实验内容:
1、实验分析
编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s( char型),i,j,k(int型),a[]用来存放输入的字符串,token[]另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token[])来判断标识符和保留字。
2、实验过程记录
(1)源程序:
#include stdio.h /*定义I/O库所用的某些宏和变量*/
#include string.h /*定义字符串库函数*/
#include conio.h /*提供有关屏幕窗口操作函数*/
#include ctype.h /*分类函数*/
char prog[80]={\0},token[8]; /*存放构成单词符号的字符串*/
char ch;
int syn; /*存放单词字符的种别码*/
int n;
int sum; /*存放整数型单词*/
int m,p; /*p是缓冲区prog的指针,m是token的指针*/
char *rwtab[6]={begin,if,then,while,do,end};
文档评论(0)