77范文网 - 专业文章范例文档资料分享平台

河北工大《编译原理》实验指导书及参考程序 - 图文(5)

来源:网络收集 时间:2020-06-08 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

说明:1)程序四中出现的主要语义变量和辅助函数的功能为:

E1_PLACE:文法符号E1的一个语义属性,用于描述变量在符号表中登记项的序号(>0时)或临时变量的编号(<0时),可理解为代表其值。

void GEN(char *Op, char *Arg1, char *Arg2, char *Result):用来生成一个四元式,将其送到四元式表中。参考代码如下:

void GEN(char *Op, char *Arg1, char *Arg2, char *Result) {

strcpy (pQuad[NXQ].op, Op); /*pQuad为全局变量,是用于存放四元式的数组*/ strcpy (pQuad[NXQ].arg1, Arg1); strcpy (pQuad[NXQ].arg2, Arg2); strcpy (pQuad[NXQ].result, Result);

NXQ++; /*全局变量NXQ用于指示所要产生的下一个四元式的编号*/ }

char *NewTemp(void):产生临时变量的函数,每调用一次都产生一个新的临时变量,并返回这个新的临时变量名,临时变量名产生的顺序依次为T1、T2、T3、……。例如:

char *NewTemp(void) /*产生一个临时变量*/ {

char *TempID=(char *)malloc(MAXLENGTH);

sprintf (TempID, “T%d”, NXTemp++); /*整型变量NXTemp指示临时变量的编号*/ return TempID; }

2)注意修改已在前面两个实验中完成的词法、语法分析器,以便在此基础

上进行语义分析。如有必要,从总体设计的角度出发,重新定义整个系统所需要的一些数据结构、宏和全局变量等。例如:

/*定义与词法分析器的接口*/

union WORDCONTENT /*存放单词词文内容的联合*/ {

char Val1[MAXLENGTH]; /*对于标识符、关键字或由一个以上字符组成的复合单词结构的词

文(如:=、<=、<>等),采用字符串作为其值的内部表示*/

int Val2; /*对于数值常量采用其二进制值作为它们的内部表示*/ float Val3;

char Val4; /*记录由一个字符组成的单词的词文*/ };

struct WORD /*单词的二元式形式表示*/ {

int Sym; /*单词的类别编码*/

union WORDCONTENT value; /*单词的值*/

}word; /*word存放由词法分析程序扫描得到的二元式形式的单词*/

/*定义语法(语义)分析器的接口*/

struct QUATERNION /*四元式表的结构*/ {

char op[MAXLENGTH]; /*操作符*/

char arg1[MAXLENGTH]; /*第一个操作数*/ char arg2[MAXLENGTH]; /*第二个操作数*/ char result[MAXLENGTH]; /*运算结果*/ }*pQuad; /*存放四元式的数组*/

这样,用于处理表达式、项和因式的函数原型可分别写为:char *E(void)、char *T(void)

和char *F(void)。在此仅给出处理表达式的函数的参考代码:

char *E(void) {

char opp[2], *E1_place, *E2_place, *E_place; E1_place=T( );

while (word.Sym==PL || word.Sym==MI) /*单词为’+’或’-’*/ {

sprintf(opp, ”%c”, word.value.Val4);

scanner( ); /*调扫描器读下一个单词,并将其二元式形式的表示送入全局变量word中*/ E2_place=T( );

E_place=NewTemp( );

GEN(opp, E1_place, E2_place, E_place); E1_place=E_place; }

return E1_place; }

五、扩充要求

1、增加语义分析的范围,例如进一步完成布尔表达式(参见教材P200)、常见程序流程控制语句(参见教材P205)等的翻译。

2、完成实验二中文法G3[<程序>]所定义的语言的语法制导翻译程序。

实验报告要求

要求每人针对实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。

实验报告主要包括三方面内容: 1、实验设计

实验采用的文法,状态转换图或状态矩阵,程序流程设计和每部分的主要功能说明等。 2、程序代码

实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。 3、实验过程问题分析记录

记录实验过程中发生的编译错误并分析错误原因和解决的方法及结果,参考表3。

表3 实验一中发生的编译错误记录表

编出错时号 间 1 实验一第1课时 4、实验结果

记录最终的程序执行结果,至少包括一个正确单词或表达式的识别结果和一个错误单词或表达式的识别结果。

出错代码 1 #include 错误提示 出错原因分析 修改方法 去掉源程序中所有行号标记 修改结果 消除了66个错误 error C2143: syntax “1”是示例程序中error : missing ';' 代码的行号标记,不before 'constant' 应出现在源程序中

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库河北工大《编译原理》实验指导书及参考程序 - 图文(5)在线全文阅读。

河北工大《编译原理》实验指导书及参考程序 - 图文(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/1099820.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: