编译原理实验报告——词法分析器和LL(1)文法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》综合性
实验报告
实验学期2016 至2017 学年第 1 学期专业计算机科学与技术班级1403
学生姓名黄世增学号**********
任课教师赵曦
实验成绩
《编译原理》课程综合性实验报告
开课实验室:C210 2016年12月6日
四、实验步骤
编写程序时,先定义几个全局变量,key[]事先存放7个关键字,words[]用来存放识别出来的单词二元组,text用来存放从文件读取的内容,word用于存放识别出来的单词,length存放字符个数,k存放识别出来的单词个数。
首先,将文本内容读取到text中,文本内容最后一个字符是空白符,然后调用scan方法,逐个扫描每个字符,如果word的第一个字符是字母,则进行拼字符串,再判断是关键字还是标识符;如果word的第一个字符是数字,则在word 清空之前判断是否有识别出非数字字符,若有,则出错,若没有,则识别出来的字符串是常数;若word第一个字符是运算符或界限符,则各自存到words[]中。最后扫描结束后输出。
五、实验结果及分析
六、实验小结和思考
通过这次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法分析在实践中的应用有了深入的掌握, 让我对高级语言的学习有了更深的认识,了解得更透彻。
七、源程序清单
#include
#include
#include
using namespace std;
#define MAX 10000
struct WordString
{
string Word;//单词
int category;//类别
};
char *key[7] = {"int","for", "while", "do", "return", "break", "continue"};//关键字WordString words[MAX]; //创建一个单词符号串
string text; //读入的文本存入text中
string word; //分割出的单词用word表示
int length; //字符个数
int k; //总单词个数
开课实验室:C210 2016年12月8日
六、实验小结和思考
本实验加深了我对LL(1)分析法的算法和思想的理解。
七、源程序清单
#include
#include
#include
#include
/*1:E->TE' 2:E'->+TE' 3:E'->ε? 4:T->FT' 5:T'->*FT' 6:T'->ε? 7:F->(E) 8:F->i*/ int ll1[5][6]={{1,0,0,1,0,0},
{0,2,0,0,3,3},
{4,0,0,4,0,0},
{0,6,5,0,6,6},