好文档 - 专业文书写作范文服务资料分享网站

语义分析实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

实验三 语法分析 309 科3 李君林

一.实验目的:

通过使用、剖析和扩充TINY语言的语义分析程序,掌握编译器的语义分析程序的构造方法。

二.实验内容

(一)运行TINY的语义分析程序 (二)扩充TINY的语法分析程序 提示:

考虑作用域(如:函数)和数组时可能需要修改符号表。

三.实验步骤

1.先读懂TINY语义程序(相关联的文件: )

(1)buildSymtab(syntaxTree); 充TINY的语法分析程序

本次实验我首先将源程序实现的功能改成符合C_MINUS的符号表与类型检测 然后加入没申明调用与数组调用错误即数组没申明而调用数组类型。

四.实验结果

1.正确的测试程序 /**/

int gcd (int u,int v[]) {

if(v==0) return u; else

return gcd(v,u); }

void main(void) {

int x;int y; read x; x=y=2;

while(x>0) y=y-1; write y;

return (gcd(x,y)); }

/**/

运行结果:

经检验测试程序代码无语义错误 2.错误测试程序 /**/

int gcd (int u,int v[]) {

if(v==0) return u; else

return gcd(v,u); }

void main(void) {

int x;int y; read x; t=1; x=y=2; x[2]=2; while(x>0) y=y-1; write y;

return (gcd(x,y)); } /**/

实验结果:

检测到13行 t没有申明 检测到15行 x不是一个数组

五.实验心得

通过本次实验学会了使用、剖析和扩充TINY语言的语义分析程序,掌握编译器的语义分析程序的构造方法。加深了对书本语义分析的理解,感受到学以致用的快感,增强对本课程的兴趣。实验中遇到的最大问题:如何查询符号表判断数组,后面在其数据结构中增加了一个属性Len,如果不是数组将其赋为-1.

六.关键程序代码()

/****************************************************/ /* File: */

/* Semantic analyzer implementation */ /* for the TINY compiler */ /* Compiler Construction: Principles and Practice */ /* Kenneth C. Louden */ /****************************************************/

#include \ #include \ #include \

/* counter for variable memory locations */ static int location = 0;

/* Procedure traverse is a generic recursive * syntax tree traversal routine:

* it applies preProc in preorder and postProc * in postorder to tree pointed to by t */

static void traverse( TreeNode * t,

语义分析实验报告

实验三语法分析309科3李君林一.实验目的:通过使用、剖析和扩充TINY语言的语义分析程序,掌握编译器的语义分析程序的构造方法。二.实验内容(一)运行TINY的语义分析程序(二)扩充TINY的语法分析程序
推荐度:
点击下载文档文档为doc格式
1k8s89ebsm6d7jn4l8uv58u602x7bw012om
领取福利

微信扫码领取福利

微信扫码分享