• 大小: 287KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-17
  • 语言: C/C++
  • 标签: 编译器  实现  

资源简介

基于tiny的小型编译器,包括词法分析,语法分析,转化成三地址码,最后转化成c语言代码,在c语言编译器上编译运行

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
struct LRNode
{
int flag;
int num;
};
typedef struct CSNode
{
char data[40];
struct CSNode *firstchild*nextsibling*next*parent;
}CSNode*CSTree;
CSTree pT;
char pre[40];
int b;
CSTree t[100];//指针崭
int top3;
int S1[100];//状态栈
int S2[100];//符号栈
int top1;
int top2;
int mark1=1;
int mark2=1;
int count=0;
int Sif[100];//if栈
int topi=0;
int tmp=0;//:=临时变量标号Ttmp
char a[40];
int Srepeat[100];//repeat栈
int topr=0;
int linenumber=1;
char Difined[100][100];//用于存储已经定义的变量
int  dif=0;
struct Gram
{
char ch;
int length;
};
int strstr1(char str[40]char ch)
{
for(int i=0;i {
if(str[i]==ch)
return 1;
}
return 0;
}
void Strprint(char str[20])
{
int i;
int l=strlen(str);
for(i=0;i {
if(str[i]==‘:‘)
break;
printf(“%c“str[i]);
}
printf(“\n“);
}
int Exchange1(char str[20])//非数字
{
int num;
if(!strcmp(str“if“)) num=0;
else if(!strcmp(str“then“)) num=1;
else if(!strcmp(str“end“)) num=2;
else if(!strcmp(str“else“)) num=3;
else if(!strcmp(str“repeat“)) num=4;
else if(!strcmp(str“until“)) num=5;
else if(!strcmp(str“read“)) num=6;
else if(!strcmp(str“write“)) num=7;
else if(!strcmp(str“:=“)) num=8; 
else if(!strcmp(str“<“)) num=9;
else if(!strcmp(str“=“)) num=10;
else if(!strcmp(str“+“)) num=11;
else if(!strcmp(str“-“)) num=12;
else if(!strcmp(str“*“)) num=13;
else if(!strcmp(str“/“)) num=14;
else if(!strcmp(str“(“)) num=15;
else if(!strcmp(str“)“)) num=16;
else if(!strcmp(str“;“)) num=17;
else num=18;
return num;
}
int Exchange2(char ch)
{
int num;
if(ch==‘P‘) num=21;
else if(ch==‘S‘) num=22;
else if(ch==‘G‘) num=23;
else if(ch==‘I‘) num=24;
else if(ch==‘U‘) num=25;
else if(ch==‘A‘) num=26;
else if(ch==‘R‘) num=27;
else if(ch==‘W‘) num=28;
else if(ch==‘E‘) num=29; 
else if(ch==‘B‘) num=30; 
else if(ch==‘C‘) num=31; 
else if(ch==‘O‘) num=32; 
else if(ch==‘M‘) num=33; 
else if(ch==‘T‘) num=34; 
else if(ch==‘F‘) num=35; 
return num;
}
void PrintCSTree(CSTree Tint i)//按凹入表形式打印输出树的元素i表示结点所在层次初次调用时i=0
{
int j;
CSTree q;
  for(j=1;j<=i;j++) printf(“ “); //留出i个空格以表现出层次
  if(!strcmp(T->data“<“))
  {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(!strcmp(T->data“=“))
 {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(!strcmp(T->data“+“))
  {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(!strcmp(T->data“-“))
  {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(!strcmp(T->data“/“))
  {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(!strcmp(T->data“*“))
 {
  printf(“op:“);
  printf(“%s\n“T->data); //打印元素换行
  }
  else if(strstr(T->data“:=“))
 {
  printf(“assign to:“);
  Strprint(T->data); //打印元素换行
  }
  else

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

     文件        104  2009-12-29 10:33  编译原理课设(最终)\1.txt

     文件        134  2009-12-29 10:35  编译原理课设(最终)\2.txt

     文件        217  2009-12-29 10:36  编译原理课设(最终)\3.txt

     文件        184  2009-12-29 10:36  编译原理课设(最终)\4.txt

     文件        121  2009-12-29 10:36  编译原理课设(最终)\5.txt

     文件        197  2009-12-29 12:22  编译原理课设(最终)\Clanguage.txt

     文件        134  2009-12-24 17:07  编译原理课设(最终)\data.txt

     文件      41984  2009-12-29 12:25  编译原理课设(最终)\Debug\vc60.idb

     文件      61440  2009-12-29 12:25  编译原理课设(最终)\Debug\vc60.pdb

     文件     254072  2009-12-29 12:25  编译原理课设(最终)\Debug\编译原理课设(最终).exe

     文件     261192  2009-12-29 12:25  编译原理课设(最终)\Debug\编译原理课设(最终).ilk

     文件     287684  2009-12-29 12:25  编译原理课设(最终)\Debug\编译原理课设(最终).pch

     文件     459776  2009-12-29 12:25  编译原理课设(最终)\Debug\编译原理课设(最终).pdb

     文件      63035  2009-12-29 12:25  编译原理课设(最终)\Debug\编译课程设计(最终).obj

     文件        121  2009-12-29 12:22  编译原理课设(最终)\MidLan.txt

     文件        469  2009-12-29 12:22  编译原理课设(最终)\so.txt

     文件        104  2009-12-29 10:33  编译原理课设(最终)\测试用例\1.txt

     文件        134  2009-12-29 10:35  编译原理课设(最终)\测试用例\2.txt

     文件        217  2009-12-29 10:36  编译原理课设(最终)\测试用例\3.txt

     文件        184  2009-12-29 10:36  编译原理课设(最终)\测试用例\4.txt

     文件        121  2009-12-29 10:36  编译原理课设(最终)\测试用例\5.txt

     文件       1328  2009-12-29 10:31  编译原理课设(最终)\测试用例\测试用例说明.txt

     文件       1328  2009-12-29 10:31  编译原理课设(最终)\测试用例说明.txt

     文件       4454  2009-12-29 12:25  编译原理课设(最终)\编译原理课设(最终).dsp

     文件        548  2009-12-29 12:24  编译原理课设(最终)\编译原理课设(最终).dsw

     文件      33792  2009-12-29 12:25  编译原理课设(最终)\编译原理课设(最终).ncb

     文件      48640  2009-12-29 12:25  编译原理课设(最终)\编译原理课设(最终).opt

     文件       2092  2009-12-29 12:25  编译原理课设(最终)\编译原理课设(最终).plg

     文件      41159  2009-12-29 12:25  编译原理课设(最终)\编译课程设计(最终).cpp

     目录          0  2009-12-29 12:25  编译原理课设(最终)\Debug

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

评论

共有 条评论