Skip to content

slatbox/MiniC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniC 编译器说明

简介

相信计算机系的学生都学过一门必修课:编译原理,这个代码库就是当时最终的编译原理课程设计的大作业。

之所以叫MiniC是因为课程的要求是使用任何编程语言实现C语言语法的子集。

此编译器是在编译原理经典教程龙书附录A中的代码的基础上开发而来的。龙书上的代码只实现一部分语法的前端,我们在此基础上扩充了一些语法:函数定义,函数调用,for语句,添加了一些常见的语法糖:变量定义与赋值合一的语法,对穿插变量定义,变量使用的支持等。

除此之外此编译器的后端是我们独立编写的,因为时间方面的压力此编译器的后端用的完全是一些朴素的方法,效率方面堪忧,但是最基本的功能是能实现的。

MiniC支持的语法特性:

  1. int数据类型(前端其实还实现了char,float,数组,但是迫于时间压力相应后端没有实现。
  2. 各类循环语句:for,while,do-while
  3. 选择语句:if,if-else语句
  4. 函数的定义与调用(因为只实现了int类型所以函数的返回类型也必须是int而且函数调用暂时不能单独作为一条语句,只能作为表达式的一部分。

如何汇编生成的汇编代码

本编译器面向的是masm32汇编套件,因此只支持windows平台,可以从http://www.masm32.com/download.htm出下载masm32。

仍然存在的问题

已知的问题:

  1. 对除法仍然存在问题
  2. 函数的定义与调用部分的语义合理性分析缺失
  3. for语句的更新语句最后必须要加上一个分号(这是因为在进行语法分析时是将for语句的括号内的三部分匹配为三个表达式的)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages