资源简介
编译实验,是对你在txt文档中写入的任意赋值语句程序段进行翻译成四元式并且进行词法分析。
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
typedef struct SqStack{//定义栈的数据结构
char *base;
char *top;
}SqStack;
struct Query{//数据结点
char thename[45];
};
struct QueNode{//链表
Query query;
QueNode *pnext;
};
QueNode*Addshu(QueNode*phchar*str){
QueNode*p1;
p1=new QueNode();
strcpy(p1->query.thenamestr);
p1->pnext=ph;
ph=p1;
return ph;
}
void Push(SqStack &Schar e){ // 将元素e插入到栈S中,成为新的栈顶元素
*S.top++=e;
}
char Pop(SqStack &Schar &ch){ //字符型取栈顶元素并删除之
if(S.top==S.base){
ch=NULL;
}
else ch=*--S.top;
return ch;
}
char Gettop(SqStack &Schar &e){//字符型取栈顶元素
if(S.base==S.top)e=NULL;
else e=*(S.top-1);
return e;
}
int in(char c){//判断是否为运算符
char su[10]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘;‘‘=‘};
for(int i=0;i<8;i++)
if(c==su[i])return 1;
return 0;
}
char precede(char x1char x2){//优先级判断
char c1c2c;
c1=x1;c2=x2;
if(c1==‘(‘){
if(c2==‘)‘)
c=‘=‘;
else
c=‘<‘;
}
else if(c1==‘)‘)
c=‘>‘;
else if(c1==‘;‘){
if(c2==‘;‘)
c=‘=‘;
else
c=‘<‘;
}
else{
int ab;
switch(c1){
case ‘+‘:
case ‘-‘:a=2;break;
case ‘*‘:
case ‘/‘:a=3;break;
case ‘(‘:a=4;break;
case ‘)‘:a=1;break;
case ‘;‘:a=-2;break;
case ‘=‘:a=-1;break;
}
switch(c2){
case ‘=‘:a=-1;break;
case ‘+‘:
case ‘-‘:b=2;break;
case ‘*‘:
case ‘/‘:b=3;break;
case ‘(‘:b=4;break;
case ‘)‘:b=1;break;
case ‘;‘:b=-2;break;
}
if(a-b>=0)c=‘>‘;
if(a-b<0)c=‘<‘;
}
return c;
}
void main(){
cout<<“赋值语句翻译成四元式!!“< ifstream fin(“thetwo.txt“);
ofstream quedata(“answer.txt“);
char cethetax;
char a[20]=““b[20]=““;
int s=0i=1;
char chs[20]=““che[2]=““kon[20]=““;
QueNode*ph=NULL;
char str[50];
SqStack stack;
stack.base=stack.top=&str[0];
Push(stack‘;‘);
fin.get(c);
while(c!=‘;‘||Gettop(stacke)!=‘;‘){
if(!in(c)){
che[0]=c;
if((c>=‘A‘&&c<=‘Z‘)||(c>=‘a‘&&c<=‘z‘)||c==‘_‘)i=0;
strcat(chsche);fin.get(c);
if(in(c)){
if(i==0)quedata<<“ “< else quedata<<“ “< ph=Addshu(phchs);strcpy(chskon);
if(c!=‘;‘)quedata<<“ “< else quedata<<“ “< }
}
else{
char a2=s+‘0‘;
char a1[]={‘(‘‘t‘a2‘)‘‘\0‘};i=1;
switch(precede(Gettop(stacke)c)){
case ‘<‘:
if(c==‘(‘||c==‘)‘)quedata<<“ “< Push(stackc);fin.get(c);break;
case ‘=‘:
x=Pop(stackx);fin.get(c); break;
case ‘>‘:
theta=Pop(stacktheta);
strcpy(bph->query.thename);ph=ph->pnext;strcpy(aph->query.thename);ph=ph->
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3595 2009-12-01 11:27 赋值语句的翻译程序设计\赋值语句的翻译程序设计.dsp
文件 3424 2009-11-15 12:40 赋值语句的翻译程序设计\赋值语句的翻译程序设计.cpp
文件 48640 2009-12-01 11:27 赋值语句的翻译程序设计\赋值语句的翻译程序设计.opt
文件 552 2009-12-01 11:27 赋值语句的翻译程序设计\赋值语句的翻译程序设计.dsw
文件 565336 2009-11-30 22:17 赋值语句的翻译程序设计\Debug\赋值语句的翻译程序设计.exe
文件 41984 2009-12-01 11:27 赋值语句的翻译程序设计\赋值语句的翻译程序设计.ncb
文件 278 2009-12-01 11:27 赋值语句的翻译程序设计\赋值语句的翻译程序设计.plg
文件 43 2009-11-15 12:35 赋值语句的翻译程序设计\thetwo.txt
文件 3026 2009-11-14 21:14 赋值语句的翻译程序设计\themain.txt
文件 922 2009-12-01 11:27 赋值语句的翻译程序设计\answer.txt
目录 0 2009-11-14 11:21 赋值语句的翻译程序设计\Debug
目录 0 2009-11-14 10:23 赋值语句的翻译程序设计
----------- --------- ---------- ----- ----
667800 12
- 上一篇:UKF与EKF算法应用比较
- 下一篇:CYK算法实现句法分析perl
相关资源
- 编译原理中间代码生成
- 编译原理实验_赋值语句的翻译程序设
- 赋值语句语法分析
- 赋值语句词法和语法分析程序
- 编译——while语句的翻译递归下降,四
- 编译原理FOR循环语句的翻译程序设计
- 赋值语句的翻译程序设计递归下降法
- 赋值语句的语法分析程序递归下降法
- C0编译器中间代码生成
- 编译的中间代码四元式生成
- 编一个程序,定义结构类型有学号、
- 语法制导翻译与中间代码四元式的生
- hex文件反编译程序
- 赋值语句的翻译程序
- 编译课设While循环LL(1)法,输出四元
- 布尔表达式的LR翻译器,中间代码为四
- 赋值语句的递归下降翻译程序设计
- 基于LR方法的WHILE循环语句的编译系统
- 目标代码生成 四元式
- PL/0编译程序的研究与改进
- DO-WHILE循环语句的翻译程序设计(简单
- IF-ELSE条件语句的翻译程序设计LL1法、
- 中间代码生成四元式设计
- 计算器 实现复数、有理数、矩阵和集
- PL/0编译程序 for语句功能扩展实现
- IF-ELSE条件语句的翻译程序设计递归下
- 反编译程序的源代码,Delphi版.rar
- LR分析表-语法树-四元式
- FOR循环语句的翻译程序设计(LL法、输
- 赋值语句的LR分析方法翻译程序设计
评论
共有 条评论