项目名称:基于JAVA的C语言编译器

一、开发环境

项目技术:JAVA GUI
开发软件:IDEA
jdk版本:1.8.0

二、功能模块

词法分析、语法分析、语义分析、目标代码生成

c编译 大数据java java实现c语言编译器_java

2.1词法分析程序功能

输入:源程序字符串
输出:(type、token)构成的序列
Type为类型
Token为存放单词自身的字符串
a) 可以识别C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词。
b) 可以识别C语言的标点符号和运算符。
c) 可以识别C语言允许的无符号实数形式,例如整数。
词法分析的输入是源程序字符串,它的主要任务是对源程序字符串进行扫描和分解,根据构词法将字符流转化为单词流,并将具体单词及其单词符号存入对应的Arraylist中。

词法分析状态转换图:

c编译 大数据java java实现c语言编译器_开发语言_02

词法分析功能流程图:

c编译 大数据java java实现c语言编译器_代码生成_03

2.2 语法分析

先实现集合FIRST(X)构造算法和集合FOLLOW(A)构造算法,再根据FIRST和FOLLOW集合构造出预测分析表,并对指定的句子打印出分析栈的分析过程,判断是否为该文法的句子。

语法分析功能流程图:

c编译 大数据java java实现c语言编译器_词法分析_04

2.3 语义分析

程序中,我们采用了语法制导翻译法,为文法的一些产生式配备了语义动作,在语法分析的过程中,每当使用一条产生式进行推导时,就执行相应产生式的语义动作,从而实现语义处理,并根据相应的语义动作并生成四元式。

2.4目标代码生成

编译程序的最终目的是将源程序翻译成目标程序,目标代码生成是编译程序的最后一个工作。本编译器在将四元式转换成目标代码时,生成的是汇编代码。程序会读取中间代码生成这部分的四元式结果,根据遇到的操作符不同,所设计出的汇编语言也有所不同。

对于汇编语言代码,需要由汇编程序汇编,然后运行。这样做的好处是可以产生符号指令和利用宏机制来帮助生成代码,使得代码生成的过程变得容易,因此这种形式相较来说更有灵活性。

三、项目展示

测试用例:
输出斐波那契数列前十项:

void main(){
 int a=0,b=1,c;
 printf(“%d”,a);
 printf(“%d”,b);
 for (int i = 0; i < 10;i++) {
 c=a+b;
 a=b;
 b=c;
 printf(“%d”,c);
 }
 }

测试结果:
词法分析通过,语法分析通过,语义分析生成四元组,最后生成目标代码。

c编译 大数据java java实现c语言编译器_c编译 大数据java_05

c编译 大数据java java实现c语言编译器_词法分析_06

c编译 大数据java java实现c语言编译器_代码生成_07


c编译 大数据java java实现c语言编译器_java_08

四、源码获取

喜欢的记得点个赞!