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

资源简介

东北大学软件学院编译原理课程的代码及报告

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include  
#include 

 char ID[50][12];//符号表
 float C[20]; //常数表
 int c = 0;

int aut[10][7]={  2 0 0 0 8 9 15
  2 3 511 0 0 11
  4 0 0 0 0 0 0
  4 0 511 0 0 11
  7 0 0 6 0 0 0
  7 0 0 0 0 0 0
  7 0 011 0 0 11
  8 0 0 0 8 0 12
  0 0 0 0 0 10 14
  0 0 0 0 0 0 13};

char keywords[28][12]={“program““begin““end““var““while““do“
“repeat““until““for““to““if““then““else“  
“;“ “:“ “(“ “)“ ““ “:=“ “+“ “-“ “*“ “/“
“>“ “>=“ “==“ “<“ “<=“};

//code为0 代表为常数
// code为1 代表为关键字
//code为2 代表为标识符
// code为3 代表为界符
//value代表为该单词在其各个表中的位置

struct token
      { int code;
       int value;}; //Token结构

//函数IsLetter()判断字符ch是否为字母
int IsLetter(char ch)
{
if((ch >= ‘A‘&&ch <= ‘Z‘) || (ch >= ‘a‘&&ch <= ‘z‘))
{
return 1;
}else
{
return 0;
}
}
//函数IsDigit()判断字符ch是否为数字
int IsDigit(char ch)
{
if(ch >= ‘0‘&&ch <= ‘9‘)
{
return 1;
}else
{
return 0;
}
}

//函数IsID()判断字符ch是否为单界符
int IsID(char ch)
{
  if(ch ==‘;‘||ch ==‘:‘||ch ==‘(‘||ch ==‘)‘||ch ==‘‘||ch ==‘=‘
 ||ch ==‘+‘||ch ==‘-‘||ch ==‘*‘||ch ==‘/‘||ch ==‘<‘||ch ==‘>‘)
  {
 return 1;
  }else
  {
  return 0;
  }
}

//查状态变换表
int find(int schar ch)  //s是当前状态,ch是当前字符,返回值是转换后状态
{
//返回11状态
//s == 2
  if(s == 2 && (ch!=‘.‘ && !IsDigit(ch) && ch != ‘E‘ && ch!= ‘e‘))
  {
  return 11;
  }
  //s == 4
    if(s == 4 && (!IsDigit(ch) && ch != ‘E‘ && ch!= ‘e‘))
  {
  return 11;
  }
 //s == 7
  if(s == 7 &&  !IsDigit(ch))
  {
  return 11;
  }

  //返回12状态
  if(s == 8 && !IsDigit(ch) &&!IsLetter(ch))
  {
  return 12;
  }


   //返回13状态
  if(s == 10)
  {
  return 13;
  }

  //返回14状态
  if(s == 9 && !IsID(ch))
  {
  return 14;
  }

  //返回15状态
  if(s == 1 && !IsDigit(ch) && !IsLetter(ch) && !IsID(ch))
  {
return 15;
  }
  

//查状态转换矩阵aut[10][7];
 if(IsDigit(ch))
 {
 return aut[s-1][0];
 }else
 {
 if(IsLetter(ch))
 {
 if(ch ==‘E‘||ch ==‘e‘ &&(s == 2 || s == 4))
 {
return aut[s-1][2];
 }
 return aut[s-1][4];
 }else
 {
 if(ch ==‘.‘)
 {
return aut[s-1][1];
 }else
 {
 if(IsID(ch))
 {
 if((ch ==‘+‘||ch ==‘-‘)&&(s!=1) && (s!=9))
 {
return aut[s-1][3];
 }
 return aut[s-1][5];
 }else
 {
 return aut[s-1][6];
 }
   
 }
 }
 }
  
}

//将w[i]中的符号拼接到strTOKEN的尾部函数
char * mystrcmp(char *str char w) 
{
int i=0; 
while(str[i]!= NULL) 
i++; 
if(w !=‘\0‘ )
//要为下一个字符分配内存
str[i] = w;
return str;
}
//将常数插入常数表返回常数表指针
int InsertConst(float num)
{
C[c] = num;
return c++;
}

//如果strTOKEN为关键字或界符返回关键字表或界符表的序号否则为标识符返回0
int Reserve(char *strTOKEN)
{
bool temp = 0;
for(int i = 1;i <= 28;i++)
{
if(strlen(keywords[i]) == strlen(strTOKEN))
{

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

     文件     333824  2008-10-29 08:07  编译原理张镖20063506\编译方法实验报告张镖.doc

     文件       2849  2008-10-29 10:52  编译原理张镖20063506\实验二\translator.cpp

     文件       4343  2008-04-30 22:21  编译原理张镖20063506\实验二\translation.dsp

     文件        545  2008-04-30 21:31  编译原理张镖20063506\实验二\translation.dsw

     文件      50176  2008-10-28 22:21  编译原理张镖20063506\实验二\translation.ncb

     文件      48640  2008-10-28 22:21  编译原理张镖20063506\实验二\translation.opt

     文件        911  2008-10-28 22:20  编译原理张镖20063506\实验二\translation.plg

     文件     548959  2008-10-28 22:20  编译原理张镖20063506\实验二\Debug\translation.exe

     文件    1123328  2008-10-28 22:20  编译原理张镖20063506\实验二\Debug\translation.pdb

     文件     222200  2008-10-28 22:20  编译原理张镖20063506\实验二\Debug\translator.obj

     文件     118784  2008-10-28 22:20  编译原理张镖20063506\实验二\Debug\vc60.pdb

     文件       5827  2008-10-29 10:50  编译原理张镖20063506\实验一\scaner.cpp

     文件       9295  2008-10-26 19:05  编译原理张镖20063506\scanComplier\complier.cpp

     文件       4350  2008-04-10 18:53  编译原理张镖20063506\scanComplier\scanComplier.dsp

     文件        549  2008-04-10 13:58  编译原理张镖20063506\scanComplier\scanComplier.dsw

     文件      50176  2008-10-26 19:09  编译原理张镖20063506\scanComplier\scanComplier.ncb

     文件      49664  2008-10-26 18:58  编译原理张镖20063506\scanComplier\scanComplier.opt

     文件       1506  2008-10-26 19:06  编译原理张镖20063506\scanComplier\scanComplier.plg

     文件      27631  2008-10-26 19:06  编译原理张镖20063506\scanComplier\Debug\complier.obj

     文件          0  2008-10-26 19:06  编译原理张镖20063506\scanComplier\Debug\complier.sbr

     文件     262249  2008-10-26 19:06  编译原理张镖20063506\scanComplier\Debug\scanComplier.exe

     文件     590848  2008-10-26 19:06  编译原理张镖20063506\scanComplier\Debug\scanComplier.pdb

     文件      61440  2008-10-26 19:06  编译原理张镖20063506\scanComplier\Debug\vc60.pdb

     目录          0  2008-10-29 11:10  编译原理张镖20063506\实验二\Debug

     目录          0  2008-10-29 11:09  编译原理张镖20063506\scanComplier\Debug

     目录          0  2008-10-29 10:53  编译原理张镖20063506\实验二

     目录          0  2008-10-29 10:53  编译原理张镖20063506\实验一

     目录          0  2008-10-29 11:09  编译原理张镖20063506\scanComplier

     目录          0  2008-10-29 10:53  编译原理张镖20063506

----------- ---------  ---------- -----  ----

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

评论

共有 条评论

相关资源