《编译原理》实验报告
专业班级_软工1502 姓名_赵翘楚_ 学号_20151107062_
:
通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。
采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。
图1
emit(char *result,char *arg1,char *op,char *ag2)
该函数功能是生成一个三地址语句送到四元式表中。
四元式表的结构如下:
struct {char result[8];
char ag1[8];
char op[8];
char ag2[8];
}quad[20];
(2) char *newtemp()
该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,….
Char *newtemp(void)
{
char *p;
char m[8];
p=(char *)malloc(8);
k++;
itoa(k,m,10);
strcpy(p+1,m);
p[0]=’t’;
return(p);
}
:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。
3、实验步骤
#include ""
#include ""
#include ""
char prog[100],token[8],ch;
char *rwtab[6]={"begin","if","then","while","do","end"};
int syn,p,m,n,sum,q;
int kk;
struct { char result1[8];
char ag11[8];
char op1[8];
char ag21[8];
} quad[20];
char *factor();
char *expression();
int yucu();
char *term();
int statement();
int lrparser();
char *newtemp();
scaner();
emit(char *result,char *ag1,char *op,char *ag2);
void main()
{ int j;
q=p=kk=0;
printf("\nplease input a string (end with '#'): ");
do
{ scanf("%c",&ch);
prog[p++]=ch;
}while(ch!='#');
p=0;
scaner();
lrparser();
if(q>19)printf(" to long sentense!\n");
elsefor(j=0;j<q;j++)printf("%s=%s%s
编译原理语义分析实验报告 来自淘豆网m.daumloan.com转载请标明出处.