欢迎来到天天文库
浏览记录
ID:46592829
大小:20.88 KB
页数:5页
时间:2019-11-26
《编译原理-词法分析(附源码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、词法分析实验报告一、实验项目名称词法分析二、实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。三、实验环境Windows10MicrosoftVisualStudio2015四、实验内容编制一个读单词过程,源程序为一个文件,读取该文件,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、界符五大类。并依次输出各个单词的内部编码及单词符号自身值。单词的内部编码如下:1、保留字:if、int、for、while、do、return、break、continue;单
2、词种别码为1;2、标识符:除保留字外的以字母开头,后跟字母、数字的字符序列;单词种别码为2;3、常数为无符号整形数;单词种别码为3;4、运算符包括:+、-、*、/、=;单词种别码为4;5、分隔符包括:,、;、{、}、(、);单词种别码为5。五、实验步骤在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并填入适当的信息表。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。(1)定义
3、部分:定义常量、变量、数据结构。(2)初始化:从文件将源程序全部输入到字符缓冲区中。(3)取单词前:去掉多余空白。(4)取单词:利用实验一的成果读出单词的每一个字符,组成单词,分析类型。(5)显示结果六、源程序清单、测试数据、结果#include#include#include#defineMAX100usingnamespacestd;voidmain(){//二维char数组主存储的初始化chara[MAX][15],ch='a',before;inti=0,j=0;for(i=0;i4、=0;j<15;j++){a[i][j]=NULL;}}i=0;j=0;fstreamfile;//文件打开并读入字符file.open("D:\text.txt",ios::in);if(file){cout<<"文件打开成功"<5、***********************************6、7、8、9、*************************************************************前一字符为符号当前为字母数字**********************************************************************************************************************************************************10、11、if(((ch>=32&&ch<=4712、)13、14、(ch==10)15、16、(ch>=58&&ch<=64)17、18、(ch>=91&&ch<=94)19、20、(ch==96)21、22、(ch>=123&&ch<=126))23、24、(((before>=32&&before<=47)25、26、(before==10)27、28、(before>=58&&before<=64)29、30、(before>=91&&before<=94)31、32、(before==96)33、34、(before>=123&&before<=126)))&&(ch>65&&ch<=9035、36、ch>=97&&ch<=12237、38、ch>=48&&ch<=57)){if(ch!=32&&ch!=10){i+39、+;j=0;}}if(ch!=32&&ch!=10){a[i][j]=ch;j++;}}file.close();ofstreamfileout("D:\out.txt",ios::ate);//判断字符串并输出for(intk=0;k=65&&a[k][0]<=9040、41、a[k][0]>=97&&a[k][0]<=122)//判断第一个字符是字母{if(a[k][1]>=65&&a[k][1]<=9042、43、a[k][1]>=97&&a[k][1]<=122)//判断第二个字符是字母{//判
4、=0;j<15;j++){a[i][j]=NULL;}}i=0;j=0;fstreamfile;//文件打开并读入字符file.open("D:\text.txt",ios::in);if(file){cout<<"文件打开成功"<5、***********************************6、7、8、9、*************************************************************前一字符为符号当前为字母数字**********************************************************************************************************************************************************10、11、if(((ch>=32&&ch<=4712、)13、14、(ch==10)15、16、(ch>=58&&ch<=64)17、18、(ch>=91&&ch<=94)19、20、(ch==96)21、22、(ch>=123&&ch<=126))23、24、(((before>=32&&before<=47)25、26、(before==10)27、28、(before>=58&&before<=64)29、30、(before>=91&&before<=94)31、32、(before==96)33、34、(before>=123&&before<=126)))&&(ch>65&&ch<=9035、36、ch>=97&&ch<=12237、38、ch>=48&&ch<=57)){if(ch!=32&&ch!=10){i+39、+;j=0;}}if(ch!=32&&ch!=10){a[i][j]=ch;j++;}}file.close();ofstreamfileout("D:\out.txt",ios::ate);//判断字符串并输出for(intk=0;k=65&&a[k][0]<=9040、41、a[k][0]>=97&&a[k][0]<=122)//判断第一个字符是字母{if(a[k][1]>=65&&a[k][1]<=9042、43、a[k][1]>=97&&a[k][1]<=122)//判断第二个字符是字母{//判
5、***********************************
6、
7、
8、
9、*************************************************************前一字符为符号当前为字母数字**********************************************************************************************************************************************************
10、
11、if(((ch>=32&&ch<=47
12、)
13、
14、(ch==10)
15、
16、(ch>=58&&ch<=64)
17、
18、(ch>=91&&ch<=94)
19、
20、(ch==96)
21、
22、(ch>=123&&ch<=126))
23、
24、(((before>=32&&before<=47)
25、
26、(before==10)
27、
28、(before>=58&&before<=64)
29、
30、(before>=91&&before<=94)
31、
32、(before==96)
33、
34、(before>=123&&before<=126)))&&(ch>65&&ch<=90
35、
36、ch>=97&&ch<=122
37、
38、ch>=48&&ch<=57)){if(ch!=32&&ch!=10){i+
39、+;j=0;}}if(ch!=32&&ch!=10){a[i][j]=ch;j++;}}file.close();ofstreamfileout("D:\out.txt",ios::ate);//判断字符串并输出for(intk=0;k=65&&a[k][0]<=90
40、
41、a[k][0]>=97&&a[k][0]<=122)//判断第一个字符是字母{if(a[k][1]>=65&&a[k][1]<=90
42、
43、a[k][1]>=97&&a[k][1]<=122)//判断第二个字符是字母{//判
此文档下载收益归作者所有