zimingwangEXP / C_Minus_Compiler

简易的C减编译器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

本次实验实现了一个简易的C_Minus编译器的部分功能(词法分析,语法分析) 词法分析使用了lex和手写两种方式分别实现 语法分析使用了递归下降,LL(1),SLR(1),yacc四种方式分别实现 部分实验结果如下(全部实验结果请参照实验报告及相应的文件):   一种正确输入:

int x[10];
int minloc (int a[], int low, int high){
  int i;
  int x;
  int k;
  k = low;
  x = a[low];
  i = low + 1;
  while(i < high){
    if(a[i] < x){
      x = a[i];
      k = i;
    }
    i = i + 1;
  }
  return k;
}
void main(void){
	output(minloc(x, 4, 9));
}

对应的输出结果: "词法分析结果"

语法分析输出结果
 

"使用的生成式列表"

使用的生成式列表

 

"LL1分析表"

部分LL(1)分析表

 

"LR0自动机"

部分LR(0)自动机

 

"LR0分析表"

部分SLR(1)分析表

 

"LL1分析表"

部分LL1分析表

三种树输出格式如下:  

"缩进格式"

缩进格式输出的语法分析树
 

"json格式"

json格式输出的语法分析树
 

"html"

echarts绘制的语法分析树

一种错误的输入源程序如下:

int x[10];
int minloc (int a[], int low, int high){
  int i;
  int x;
  int k;
  k = low;
  x = a[low;
  i = low + 1;
  while(i < high){
    if(a[] < x){
      x = a[i];
      k = i;
    }
    i = i + 1;
  }
  return k;
}
void main(void){
	output(minloc(x, 4, 9));
}

  相应的输出: "总体报错" "建树"

报错信息

设计思路和方法详见编译原理课程设计报告:

About

简易的C减编译器


Languages

Language:C 64.1%Language:C++ 29.1%Language:Yacc 2.8%Language:Lex 2.2%Language:HTML 1.7%Language:Shell 0.1%