资源描述:
《实验一词法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《实验一 词法分析》实验报告题目词法分析姓名及分工(组长)康黎明swe10029组员:陈俊杰swe10031组员:许冬青swe10033组员:王吉swe10028日期2012-10-28一、实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词(token),即基本保留字、标识符、常量、运算符、分隔符五大类,并依次输出各个单词的内部编码及单词符号自
2、身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)二、实验分工:康黎明负责intreserve()、voidconcatenation();陈俊杰负责booldigit()、voidgetChar()、voidgetbe();main()函数部分由康黎明和陈俊杰共同完成。许冬青负责voidretract()、boolletter();王吉负责文件读取。三、程序说明:1.程序输入/输出示例:输入如下一段C语言源程序:(实现Pascal语言的源程序也可以)main(){inta,b;a=10;b
3、=a+20;}输出如下图所示。(2,“main”)(5,“(”)(5,“)”)(5,“{”)(1,“int”)(2,“a”)(5,“,”)(2,“b”)(5,“;”)(2,“a”)(4,“=”)(3,“10”)(5,“;”)(2,“b”)(4,“=”)(2,“a”)(4,“+”)(3,“20”)(5,“;”)(5,“}”)说明:token分为基本保留字、标识符、常量、运算符、分隔符五大类,内部编码如下:识别保留字:if、int、for、while、do、return、break、continue;单词种别码
4、为1(或者一个保留字对应一个单词种别码)。其他的都识别为标识符;单词种别码为2。常量为无符号整形数;单词种别码为3。运算符包括:+、-、*、/、=、>、<、>=、<=、!=;单词种别码为4。分隔符包括:,、;、{、}、(、);单词种别码为5。以上内部编码作为参考,具体实现可自行修改。2.实现程序:参照P14页的代码。3.可选功能:a)识别实数(如3.2)、无符号数(3.2E-5或2.1E6)。b)剔除空白是一定要实现的,可选:剔除注释(/*和*/、//)和制表符(Tab键)c)负号的识别。d)检查{}与()
5、的配对。四、内部编码说明、主要函数介绍:voidconcatenation(){token[n]=character;n++;token[n]=' ';//字符串结束标志}将token中字符串与character中字符连接作为token中的新字符串。voidretract(){fseek(input,-1,1);}扫描指针回退一个字符,同时将character置为空白。intreserve(){if(strcmp(token,"if")==1)return1;elseif(strcmp(token,"in
6、t")==1)return1;elseif(strcmp(token,"for")==1)return1;elseif(strcmp(token,"while")==1)return1;elseif(strcmp(token,"do")==1)return1;elseif(strcmp(token,"return")==1)return1;elseif(strcmp(token,"break")==1)return1;elseif(strcmp(token,"continue")==1)return1;el
7、seif(strcmp(token,"void")==1)return1;elsereturn0;}按token数组中的字符串查保留字表,若是保留字则返回其编码,否则返回0。五.其他说明:编程过程中主要就是读入的字符串连接问题,以及一个字符串的结束问题一直被困在这边;后来用token[n]=' ';//字符串结束标志;还有就是第一次编写的时候,每次读入的字符串只能一行,后来用上while(character!=EOF)问题就解决了。六.源程序:#include#include8、b.h>#include#includeFILE*input,*output;//文件指针charcharacter;//字符变量,存放最新读入的源程序字符。chartoken[20];//字符数组,存放构成单词符号的字符串。intn;//n是token数组的下标。intline;//当前行号intc;//代表保留字的种别编码//该函数能判断character中的字符是否