欢迎来到天天文库
浏览记录
ID:17953631
大小:226.50 KB
页数:7页
时间:2018-09-11
《编译原理-词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《编译原理》课程实验报告题目词法分析专业计科二学位班级1班学号1102027姓名程振坤指导教师签名郑瑶一.实验序号:《编译原理》第一次实验二.实验题目:词法分析三.实验日期:2012.10.20至2012.11.3四.实验环境(操作系统,开发语言)操作系统:Windows开发语言:C++五.实验要求1)将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母或小写字母或数字或下划线”。1)将<条件>中的表示相等关系的单词“=”改为“==”2)增加字符串常量的识别。3)将原来无小数的数改为可以有小数的数二.实验步骤
2、1)用PL/0语言编写测试用例源程序。用C++语言编写词法分析程序。2)运行词法分析程序,读入PL/0语言的测试用例源程序,进行词法分析。3)设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。4)根据上述“实验要求”修改词法分析程序,同时也应修改PL/0语言测试用例源程序中的相应的单词。因为整个程序核心读取函数是getaword()函数,所以根据实验要求我进行了如下修改:1.将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母或小写字
3、母或数字或下划线”。if(cACharacter>='a'&&cACharacter<='z'
4、
5、cACharacter>='A'&&cACharacter<='Z')//如果当前字符是小写的字母或大写字母增加了读入大写字母的功能do{if(nAWordIndex6、hile((cACharacter>='a'&&cACharacter<='z'7、8、cACharacter>='0'&&cACharacter<='9'9、10、cACharacter>='A'&&cACharacter<='Z'11、12、cACharacter=='_')&&cACharacter!=EOF);//只要后面继续跟a..z或0..9或A.....Z或下划线,就要继续看后面的字符2.将<条件>中的表示相等关系的单词“=”改为“==”if(cACharacter=='=')//当前符号是'='?{cACharacter13、=GetACharacterFromFile();//如果当前符号是'=',则要再看下一个符号if(cACharacter=='=')//如果下一个符号是'='{//则单词是条件符号"=="g_Words[g_nWordsIndex].eType=EQL;//单词类型为单词类型枚举值EQLstrcpy(g_Words[g_nWordsIndex].szName,"==");//识别出的单词放进单词队列g_Words中g_Words[g_nWordsIndex].nLineNo=g_nLineNo;//在源代码文件中单词所14、在的行数g_nWordsIndex++;//识别出的单词个数加一cACharacter=GetACharacterFromFile();//再取一个符号,为下一步准备returnOK;}elsecout<15、)//新增加的识别字符串功能{nAWordIndex=0;//单词的第一个字符do{if(nAWordIndex16、的字符串末尾加上’号if(cACharacter!=EOF){szAWord[nAWordIndex]=0;//以0结尾,在单词数组中组成一个单词字符串g_Words[g_nWordsIndex].eType=CHAR;//单词类型为单词类型枚举值CHARstrcpy(g_Words[g_nWordsIndex].s
6、hile((cACharacter>='a'&&cACharacter<='z'
7、
8、cACharacter>='0'&&cACharacter<='9'
9、
10、cACharacter>='A'&&cACharacter<='Z'
11、
12、cACharacter=='_')&&cACharacter!=EOF);//只要后面继续跟a..z或0..9或A.....Z或下划线,就要继续看后面的字符2.将<条件>中的表示相等关系的单词“=”改为“==”if(cACharacter=='=')//当前符号是'='?{cACharacter
13、=GetACharacterFromFile();//如果当前符号是'=',则要再看下一个符号if(cACharacter=='=')//如果下一个符号是'='{//则单词是条件符号"=="g_Words[g_nWordsIndex].eType=EQL;//单词类型为单词类型枚举值EQLstrcpy(g_Words[g_nWordsIndex].szName,"==");//识别出的单词放进单词队列g_Words中g_Words[g_nWordsIndex].nLineNo=g_nLineNo;//在源代码文件中单词所
14、在的行数g_nWordsIndex++;//识别出的单词个数加一cACharacter=GetACharacterFromFile();//再取一个符号,为下一步准备returnOK;}elsecout<15、)//新增加的识别字符串功能{nAWordIndex=0;//单词的第一个字符do{if(nAWordIndex16、的字符串末尾加上’号if(cACharacter!=EOF){szAWord[nAWordIndex]=0;//以0结尾,在单词数组中组成一个单词字符串g_Words[g_nWordsIndex].eType=CHAR;//单词类型为单词类型枚举值CHARstrcpy(g_Words[g_nWordsIndex].s
15、)//新增加的识别字符串功能{nAWordIndex=0;//单词的第一个字符do{if(nAWordIndex16、的字符串末尾加上’号if(cACharacter!=EOF){szAWord[nAWordIndex]=0;//以0结尾,在单词数组中组成一个单词字符串g_Words[g_nWordsIndex].eType=CHAR;//单词类型为单词类型枚举值CHARstrcpy(g_Words[g_nWordsIndex].s
16、的字符串末尾加上’号if(cACharacter!=EOF){szAWord[nAWordIndex]=0;//以0结尾,在单词数组中组成一个单词字符串g_Words[g_nWordsIndex].eType=CHAR;//单词类型为单词类型枚举值CHARstrcpy(g_Words[g_nWordsIndex].s
此文档下载收益归作者所有