资源简介
编译实验,是对你在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
相关资源
- 编译原理四元式和逆波兰式
- FOR循环语句的翻译程序设计简单优先
- 赋值语句翻译四元式
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 编译原理简单赋值语句的语法分析程
- 递归下降法实现for循环的四元式和三
- 编译原理——for循环语句的翻译,L
- iPhoneOS12.1.sdk,低版本xcode不能编译程
- 《编译程序设计原理》(金英 金成植
- WHILE循环语句的翻译程序设计LR方法、
- DO-WHILE循环语句的翻译程序设计LL1法、
- 国科大编译程序高级教程2013期末试题
- 《编译程序设计原理》第二版(金英
- 编译原理四元式生成
- 编译原理赋值语句的翻译
- 编译原理课程设计代码 赋值语句的递
- 编译程序实现语法树和三地址代码
- 赋值语句词法语法语义分析程序
- Zero远控完整源代码和已编译程序
- FOR语句简单优先法四元式
- 编译原理第2版test语言 词法语法语义
- PL/0编译程序的语法分析实验报告
- 简单赋值语句的语法分析
- 编译原理及编译程序构造第二版东南
- 编译原理课设 词法分析、语法分析、
- 编译原理,词法分析,语法分析,四
- 赋值语句的语法分析程序
- 翻译程序设计输出四元式
- 赋值语句的递归下降翻译程序设计2
评论
共有 条评论