资源简介
编译原理的第二个实验,赋值语句的翻译程序设计,包括词法分析,文件输出存盘,含有.cpp .dsw .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<<“赋值语句翻译成四元式!!“< string inaona;
cerr<<“请输入源文件名:“< cin>>ina;
ifstream fin;
fin.open(ina.c_str()ios::in);
if(!fin){cerr<<“open error!“< cerr<<“请输入要生成的文件名:“< cin>>ona;
ofstream quedata;
quedata.open(ona.c_str()ios::out);
if(!quedata){cerr<<“open error!“< 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;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 74752 2010-11-21 13:11 Debug\vc60.idb
文件 110592 2010-11-21 13:11 Debug\vc60.pdb
文件 565333 2010-11-21 13:11 Debug\赋值语句的翻译程序设计.exe
文件 814816 2010-11-21 13:11 Debug\赋值语句的翻译程序设计.ilk
文件 303197 2010-11-21 13:11 Debug\赋值语句的翻译程序设计.obj
文件 2186100 2010-11-16 18:08 Debug\赋值语句的翻译程序设计.pch
文件 1131520 2010-11-21 13:11 Debug\赋值语句的翻译程序设计.pdb
文件 49152 2010-11-16 23:07 ~VC134.tmp
文件 0 2010-11-16 23:07 ~VC135.tmp
文件 1153 2010-11-16 20:27 answer.txt
文件 32 2010-11-21 12:48 test.txt
文件 3697 2010-11-18 13:21 themain.txt
文件 50176 2010-11-21 13:27 赋值语句的翻译程序设计.ncb
文件 1269 2010-11-21 13:11 赋值语句的翻译程序设计.plg
文件 3544 2010-11-21 13:11 赋值语句的翻译程序设计.cpp
文件 3595 2009-12-01 11:27 赋值语句的翻译程序设计.dsp
文件 552 2009-12-01 11:27 赋值语句的翻译程序设计.dsw
文件 48640 2010-11-21 13:27 赋值语句的翻译程序设计.opt
文件 284 2010-11-21 13:11 test_1.txt
目录 0 2010-11-21 13:11 Debug
----------- --------- ---------- ----- ----
5348404 20
- 上一篇:西门子804D
- 下一篇:基于 OPNET 的 LEO 卫星网络协议仿真平台研究
评论
共有 条评论