资源简介
采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成三地址指令。
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
struct //四元式的定义
{
char result[12];
char ag1[12];
char op[12];
char ag2[12];
}quad;
//struct { char result1[8];
// char ag11[8];
// char op1[8];
// char ag21[8];
//} quad[20];
char prog[80];//缓冲区
int p=0;//缓冲区prog的指针
char token[8];//单词
int m=0;//单词token的指针
char ch;//需要分析的字符
int syn=0;//单词的种别码
int sum=0;//计算整数
int n=0;//计数器
int kk=0;//分析程序开始的标志
int k=0;
char *rwtab[6]={“begin““if““then““while““do““end“};//关键字
void scaner();//扫描函数
char *factor();//因子
char *term();//项
char *expression();//表达式
int yucu();//语句串
int statement();//语句
void emit(char *resultchar *ag1char *opchar *ag2);
char *newtemp();
void emit(char *resultchar *ag1char *opchar *ag2)
{
strcpy(quad.resultresult);
strcpy(quad.ag1ag1);
strcpy(quad.opop);
strcpy(quad.ag2ag2);
cout< //q++;
}
char *newtemp()
{
char *p=(char *)malloc(12);
char m[12];
k++;//kk++?
itoa(km10);
strcpy(p+1m);
p[0]=‘t‘;
return (p);
}
void scaner()
{
for(n=0;n<8;n++)//for(m=0;m<8;m++)token[m++]=NULL;
{
token[n]=0;//初始化单词
}
ch=prog[p++];
while(ch==‘ ‘)
{
ch=prog[p++];//过滤空格
}
if ((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a‘&&ch<=‘z‘))
{
m=0;
while ((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))
{
token[m++]=ch;//将当前字符存入单词
ch=prog[p++];//取下一个
}
token[m++]=‘\0‘;//结束符
p--;//指针归位
syn=10;//假定是变量
for (n=0;n<6;n++)
{
if (strcmp(tokenrwtab[n])==0) //-----1补充参数
{
syn=n+1;//关键字!
break;
}
}
}
else
if(ch>=‘0‘&&ch<=‘9‘)
{
sum=0;
while (ch>=‘0‘&&ch<=‘9‘)
{
sum=sum*10+ch-‘0‘;//计算数字
ch=prog[p++];
}
p--;//指针归位
syn=11;//是数字!
}
else
switch (ch)
{
case‘>‘ :
m=0;
token[m++]=ch;
ch=prog[p++];
if (ch==‘=‘)
{
syn=24;//是“>=”
token[m++]=ch;//将“=”存入单词
}
else
{
syn=23;//是“>”
p--;//指针归位
}
break;
case‘<‘:
m=0;
token[m++]=ch;
ch=prog[p++];
if (ch==‘>‘)
{
syn=21;//是“<>”
token[m++]=ch;//将“>”存入单词
}
else
{
if (ch==‘=‘)
{
syn=22;//是“<=”
token[m++]=ch;//将“=”存入单词
}
else
{
syn=20;//是“<”
p--;//指针归位
}
}
break;
case‘:‘:
m=0;
token[m++]=ch;
ch=prog[p++];
if (ch==‘=‘)
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
p--;
}
break;
case‘-‘:
syn=13;
token[0]=ch;
break;
case‘+‘:
syn=14;
token[0]=ch;
break;
case‘*‘:
syn=15;
token[0]=ch;
break;
case‘/‘:
syn=16;
token[0]=ch;
break;
case‘;‘:
syn=26;
token[0]=ch;
break;
case‘(‘:
syn=28;
token[0]=ch;
break;
case‘)‘:
syn=27;
token[0]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5949 2014-06-10 09:16 编译原理 中间代码生成\中间代码生成.cpp
文件 94720 2014-06-10 09:45 编译原理 中间代码生成\编译原理 中生成间代码.doc
目录 0 2014-06-10 13:31 编译原理 中间代码生成
----------- --------- ---------- ----- ----
100669 3
- 上一篇:微波放大器设计
- 下一篇:基于监控视频的前景目标提取
相关资源
- 递归下降语法分析实验报告
- 实验二 递归下降语法分析程序设计
- 基于Pascal语言的语法分析器
- 递归下降分析程序 很好的实验要求
- 编译原理实验 语义分析与中间代码
- 递归下降分析法的实现
- 编译原理——语法分析器递归下降分
- 编译原理 递归下降语法分析程序代码
- 编译——while语句的翻译递归下降,四
- 编译原理FOR循环语句的翻译程序设计
- 赋值语句的翻译程序设计递归下降法
- 赋值语句的语法分析程序递归下降法
- 语义分析及中间代码生成程序设计原
- C0编译器中间代码生成
- 中间代码生成
- 赋值语句的递归下降翻译程序设计
- 中间代码生成 完整实验报告
- 四川大学计算机学院 C-语言编译器 编
- 中间代码生成四元式设计
- IF-ELSE条件语句的翻译程序设计递归下
- 中间代码生成器的设计实验报告+代码
- 编译原理 词法分析,语法分析,中间
- 编译原理中间代码生成报告
- 递归下降语法分析器
- 编译原理实验(LL(1)分析器递归下
- IF-ELSE条件语句的翻译程序设计递归下
- WHILE循环语句的翻译程序设计递归下降
- 语法制导翻译与中间代码生成
- 递归下降分析程序实验报告及代码(
评论
共有 条评论