• 大小: 148KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: 其他
  • 标签:

资源简介

哈工大威海编译原理实验报告和源代码: 实验一 词法分析 实验二 语法分析 实验三 语义分析和中间代码生成 附有代码和实验报告~仅供参考~

资源截图

代码片段和文件信息

#include  
#include  
#include   
#include    
using namespace std;  

#define  MAX 50    //长度最大值 50         
char ch =‘ ‘;      //  空格

string keyword[50]={“else““if““int“};//关键字为else,if,int
            

int alphabet(char c) {  //字母的处理过程    
    if(((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘))) 
return 1; 
    else 
return 0;
}


int KeyWord(string c){      //关键字的处理过程  
   int i;
   for(i=0;i      if(keyword[i].compare(c)==0)
  return 1;  
       } 
    return 0;
}


int num(char c){        //数字的处理过程
     if(c>=‘0‘&&c<=‘9‘) 
 return 1; 
     else 
 return 0;
}


void operation(FILE *fpin){//运算符处理过程
ofstream out(“token.txt“ios::out); 
    string arr=““;                         
 while((ch=fgetc(fpin))!=EOF) {             
            arr=““;                         
         if(ch==‘ ‘||ch==‘\t‘||ch==‘\n‘){}   //空格,缩进,换行,均不做操作   
         else if(alphabet(ch)){                    
               while(alphabet(ch)||num(ch)) {      
                       arr=arr+ch;           
                    ch=fgetc(fpin);          
                               }
          fseek(fpin-1LSEEK_CUR);        //循环结束后,重定位流指针从当前位置左移一位。开始判断新的输入是什么类型 
      if (KeyWord(arr)){out<       else  out<               }

 else if(num(ch)){             //若是数字
                  while(num(ch)||ch==‘.‘&&num(fgetc(fpin))||fgetc(fpin)==‘e‘||ch==‘e‘)
  {   
  if(ch==‘.‘)    
  fseek(fpin-1LSEEK_CUR);//指针左移
  arr=arr+ch;
 if(ch==‘e‘)     
  {  
  ch=fgetc(fpin); // 新读入
 
  if( ch==‘+‘) arr+=‘+‘;
  else {arr+=‘-‘ fseek(fpin-1LSEEK_CUR);};//指针左移   
  }
                        ch=fgetc(fpin); 
                  }      
                  fseek(fpin-3LSEEK_CUR);  
                  out<             }
       else switch(ch){          
               case‘+‘:
               case‘-‘ :
               case‘*‘ :
               case‘=‘ :
               case‘/‘ :out<               case‘(‘ :
               case‘)‘ :
               case‘[‘ :
               case‘]‘ :     
               case‘;‘ :
   case‘#‘ :
               case‘.‘ :
               case‘‘ :
               case‘{‘ :
               case‘}‘ :out<    
case ‘“‘:{
    string string1=““;
  do 
   {
   string1+=ch;
  ch=fgetc(fpin);
  } while (ch!=‘“‘);//循环得到 ““
  string1+=ch;          
out<    }break; 

   case‘:‘ :{ch=fgetc(fpin);
   if(ch==‘=‘) out<<“:=“<<“    \t4“<<“\t运算符“<
else {out<<“=“<<“    \t4“<<“\t运算符“<   
 fseek(fpin-1LSEEK_CUR);} //当指针回退一个字符
                        }break; 
    
  case

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4836  2014-05-19 20:16  编译原理\实验1 词法分析\CiFa.cpp

     文件       3377  2014-05-19 21:38  编译原理\实验1 词法分析\CiFa.dsp

     文件        516  2014-05-19 21:38  编译原理\实验1 词法分析\CiFa.dsw

     文件      41984  2014-05-19 21:38  编译原理\实验1 词法分析\CiFa.ncb

     文件      48640  2014-05-19 21:38  编译原理\实验1 词法分析\CiFa.opt

     文件       1176  2014-05-19 21:38  编译原理\实验1 词法分析\CiFa.plg

     文件         72  2014-05-19 12:29  编译原理\实验1 词法分析\test.txt

     文件        638  2014-05-19 21:38  编译原理\实验1 词法分析\token.txt

     文件      11258  2014-05-19 20:49  编译原理\实验2 语法分析\GT.CPP

     文件       3353  2014-05-19 21:35  编译原理\实验2 语法分析\GT.DSP

     文件        512  2014-05-19 21:38  编译原理\实验2 语法分析\GT.DSW

     文件      41984  2014-05-19 21:38  编译原理\实验2 语法分析\GT.ncb

     文件      48640  2014-05-19 21:38  编译原理\实验2 语法分析\GT.OPT

     文件       1160  2014-05-19 21:35  编译原理\实验2 语法分析\GT.PLG

     文件         32  2014-05-19 20:34  编译原理\实验2 语法分析\MP.txt

     文件         22  2014-05-19 21:35  编译原理\实验2 语法分析\PLMP.txt

     文件         32  2014-05-19 20:29  编译原理\实验2 语法分析\PM.txt

     文件         60  2014-05-19 21:35  编译原理\实验2 语法分析\RP.txt

     文件         22  2014-05-19 20:49  编译原理\实验2 语法分析\SP.txt

     文件      24915  2014-05-19 21:20  编译原理\实验3 语义分析和中间代码生成\GG.CPP

     文件       3353  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\GG.DSP

     文件        512  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\GG.DSW

     文件      50176  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\GG.ncb

     文件      48640  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\GG.OPT

     文件       1327  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\GG.PLG

     文件        138  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\string.txt

     文件         96  2014-05-19 21:30  编译原理\实验3 语义分析和中间代码生成\test.txt

     文件        253  2014-05-19 21:37  编译原理\实验3 语义分析和中间代码生成\token.txt

     文件     215603  2014-05-27 23:03  编译原理\实验报告.doc

     目录          0  2014-05-19 21:38  编译原理\实验1 词法分析

............此处省略6个文件信息

评论

共有 条评论