1 / 43
文档名称:

最新词法分析程序 语法语义分析四元式生成 实验报告.docx

格式:docx   大小:248KB   页数:43页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

最新词法分析程序 语法语义分析四元式生成 实验报告.docx

上传人:sunny 2022/3/15 文件大小:248 KB

下载得到文件列表

最新词法分析程序 语法语义分析四元式生成 实验报告.docx

相关文档

文档介绍

文档介绍:词法分析程序+语法语义分析四元式生成+实验报告
?编译原理?实验报告
本文档集合了编译原理大作业的实验报告加代码
实验主要内容为用C++实现了词法分析程序;语法语义以及四元式生成程序
代码见附录,复制进VS后程序绝对//小数
}
每读入一个字符,判断是否数字,然后找小数点,找到即为小数
标识符处理
while( (content[line][i]>=65 && content[line][i]<=90) || (content[line][i]>=91 && content[line][i]<=122) || content[line][i]>='0' && content[line][i]<='9' ) //判断是否为数字或者字母或者下划线
{
text += content[line][i];i++;
}
for( j=0; j<=13 ; j++ )
if( text==key[j] ) //查表判断是否为保存字
return 5;
检查到读取的字符为字母时,进行查表判断,找到即说明为关键字
空格,注释,行号的处理
if( mode==0 )
{if( i<content[k].length() ) i++;} //如果为行注释 直接跳到下一行
else
if( mode==-1 ) //如果为块注释 找回行号
k=templine;
[六、程序源代码]
见源代码文件。
[七、实验数据、结果]
测试数据见文件
[八、总结]
之前的每周作业曾经写过一个词法分析程序,所以这次写词法分析程序没什么太多困难。
在读取源文件时,最初的想法是一行一行的读取,读一次就存一行,这样可以节省空间资源,提高效率。但是仔细一想考虑到块注释分布在不同的行中,而且这样对行列的操作十分麻烦,而且许多地方涉及到要向前看,〔比方判断注释与/除号运算符时〕,最后只好一次全部读完,存在一个二维数组中。再用scan函数来处理。这样一来行列的处理就自由多了。
第二点,在写scan函数的时候,最初的想法是每调用一次,返回一个单词,然后在语法分析时不断调用它。但是仅仅返回单词是不够的,于是打算返回一个结构体,把单词信息行列号什么的全部存进去,这个在后来的语法语义分析中可以看到,这里任然采用的是返回一个单词类型。单词本身,和行列号作为全局变量保存。
然后只要按照流程图一步一步判断,慢慢写就行了,没有太多难度,唯一要注意的是单词位置行列的计算一定要细心。这个是要穿插在整个词法分析的全部地方的。所有涉及到读入一个字符的地方都需要考虑到如何修改行列变量。尤其是本程序拓展了块注释,要注意行列变化。
实 验 设 计 二
注:由于语义分析和四元式生成都是在语法分析的根底上拓展得到的,这一章实验报告囊括了语法,语义和四元式。
[一、实验名称]
语 法 语 义 以 及 四 元 式 分 析 程 序
[二、实验目的]
设计一个语 法 语 义 以 及 生 成 四 元 式 的 分 析 程 序
[三、实验内容及要求]
设计要求:构造相应文法的语法分析程序,应能指出源程序中出现的错误。
为语法分析程序中添加类型检查功能,包括:
① 变量重复定义;
② 变量未定义就使用;
③ 变量未赋值就引用;
将语法正确的源程序翻译成四元式。
文法见附录
[四、实验环境]
操作系统:Win7/其他
编译工具:VC++ / CFree / VS2022
[五、设计 ]

相关数据机构
struct Token
{
string value; //值
int mode; //类型
int row; //行
int col; //列
}token;
说明:这本应是词法分析时的结构,但是scan函数返回的是但单一值,于是又设计了Token函数,对scan函数进行扩充,每个单词的信息均保存一次在结构体中,方便错误报告函数进行处理。
〔2〕各个非终结符函数形式
//**********************************************************************************************************************
/*语法语义 各产生式 函数*/
void chengxu();
void han