• 大小: 940KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-27
  • 语言: 其他
  • 标签:

资源简介

编译原理的第二个实验,赋值语句的翻译程序设计,包括词法分析,文件输出存盘,含有.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


评论

共有 条评论