当前位置:首页 > 编译原理词法分析实验报告
词法分析实验报告
学院:计算机科学与技术 班级:软件工程1203班 学号:1 2 0 8 0 1 0 3 0 3 姓名: 王 青 枝
词法分析实验报告
一、 题目 词法分析
二、实验目的
1) 加深对词法分析器的工作过程的理解; 2) 加强对词法分析方法的掌握;
3) 能够采用一种编程语言实现简单的词法分析程序;
4) 能够使用自己编写的分析程序对简单的程序段进行词法分析。
二、 单词 保留字 运算符 界符(表格)
1) 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。 2) 依次输出各个单词的内部单词种别及单词符号自身值。 3) 单词的文法表示:<常量定义>::=<标识符>=<无符号整数>; <标识符>::=<字母>={<字母>|<数字>}; <加法运算符>::=+|- <乘法运算符>::=*|/
<关系运算符>::==|#|<|<=|>|>= <字母>::=a|b|…|X|Y|Z <数字>::=0|1|2|…|8|9 4) 要求:
保留字: 单词种别码为1。
包括if、int、for、while、do、return、break、continue; 标识符: 单词种别码为2。
常 数: 单词种别码为3。(常数为无符号整形数) 运算符: 单词种别码为4。
包括+、-、*、/、=、>、<、>=、<=、!= ; 分隔符: 单词种别码为5。 包括,、;、{、}、(、);
四、实验要求
1.实验环境要求 在C或C++运行环境中执行 2. 对单词的构词规则有明确的定义;
3. 编写的分析程序能够正确识别源程序中的单词符号; 4. 识别出的单词以<种别码,值>的形式保存在符号表中;
5. 对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示, 保证顺利完成整个源程序的词法分析;
五、词法分析总体架构 大的流程图
在词法分析中,先以只读方式读取一个文件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等!读取的字符送入缓冲区。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。判断时要注意保留字和识别符之间的不同,单目运算符和双目运算符之间的不同。因此可用指针进行处理。还必须熟悉字符串函数的使用。并要对非法字符作出错误提示。文本扫描结束要判断词法分析是否成功。最后是关闭文件,释放指针。 其中:
⑴常量、变量、数据结构的定义:
本程序中用keyword数组来定义保留字if、int、for、while、do、return、
break、continue;用yunsuan数组来定义运算符+、-、*、/、=、> 、<、>=、<=、!=;用fenge数组来定义分隔符包括:,、;、{、}、(、)
1- 表示保留字 2-表示标识符 3-表示常数 4-表示运算符 5-表示分隔符 Output是输出函数。 ⑵函数使用: 字符函数:
?int isalpha(int ch)
若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 ?int isalnum(int ch)
若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0 ?int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 字符串函数:
?strcmp(const char *s1,const char *s2) 比较字符串s1与s2的大小,并返回s1-s2 ?strchr(const char *string, int c)
函数就是在字符串中搜索指定字符。第一个形参就是要搜索的字符串,第二个是被搜索的字符。如果找到了该字符就返回该字符第一次出现的内存地址。如果没有找到就返回NULL(也就是0)。
?fseek(文件类型指针,位移量,起始点);
起始点指文件开头处,文件当前位置,文件尾,分别用0,1,2来表示 ④ fwrite()
共分享92篇相关文档