资源描述:
《编译原理 词法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、实验目的和要求:设计并实现一个PL/0语言(或其它语言,如C语言)的词法分析程序,加深对词法分析原理的理解。二、实验原理:词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的机内表示形式——TOKEN字,送给语法分析程序。TOKEN字是一个二元式:(单词种别码,自身值)。PL/0语言单词的种别码参见教材(或自行设定),单词自身值按如下规则给出:1标识符的自身值是它在符号表的入口地址。2常数的自身值是常数本身(或它的二进制数值)。3关键字和界限符的自身值为本身。三、实验步骤与要求1、设计的词法分析器符合软件工程的要求。2、编制程序,此程
2、序应具有如下功能:1)输入:字符串(待进行词法分析的源程序),输出:由(种别码,自身值)所组成的二元组序列。2)功能:a.滤空格b.识别保留字c.识别标识符d.拼数e.拼复合单词:例如: >=、<=、:=3)检查如下错误:a.程序语言的字符集以外的非法字符b.单词拼错,如9A88,而对于将begin拼写成begon的错误,只须把begon当成标识符即可3、请指导教师检查程序和运行结果,评定成绩。4、撰写并上交实验报告。四、试验设计和算法分析:实验原理:程序流程:置初值→调用扫描子程序→输出串结束→输出单词二元组→是→否→结束 词法分析主程序示意图
3、待分析的简单语言的词法(1) 关键字:begin if then while do end所有关键字都是小写。(2)运算符和界符: : = + - * / < > <= <> >= ; ( ) #(3):其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter
4、digit)*NUM=digitdigit*(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。、设计的词法分析器符合软件工程的要求
5、。2、编制程序,此程序应具有如下功能:1)输入:字符串(待进行词法分析的源程序),输出:由(种别码,自身值)所组成的二元组序列。2)功能:a.滤空格b.识别保留字c.识别标识符d.拼数e.拼复合单词:例如: >=、<=、:=3)检查如下错误:a.程序语言的字符集以外的非法字符a.单词拼错,如9A88,而对于将begin拼写成begon的错误,只须把begon当成标识符即可词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。三、代码:#inc
6、lude"stdio.h"#include"string.h"#include"conio.h"#include"ctype.h"charprog[80]={' '},token[8];/*存放构成单词符号的字符串*/charch;intsyn,/*存放单词字符的种别码*/n,sum,/*存放整数型单词*/m,p;/*p是缓冲区prog的指针,m是token的指针*/char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner(){m=0;sum=0;for(n=0;n<8;
7、n++){token[n]=' ';}ch=prog[p++];while(ch==''){ch=prog[p++];}if(isalpha(ch))//ch为字母字符{while(isalpha(ch)
8、
9、isdigit(ch))//ch为字母字符或者数字字符{token[m++]=ch;ch=prog[p++];}token[m++]=' ';ch=prog[p--];syn=10;for(n=0;n<6;n++){if(strcmp(token,rwtab[n])==0)//字符串的比较{syn=n+1;break;}}}elseif(
10、isdigit(ch))//ch是数字字符{while(isdigit(ch))//ch是数字字符{sum=sum*10+ch-'0';ch=prog[p++];}ch=prog[p--];syn=11;}elseswitch(ch)//匹配表示符{case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}elseif(ch=='='){syn=22;token[m++]=ch;}else{syn=20;ch=prog[p--];}break;case'>':
11、m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}els