Skip to content

A simple compiler front-end for MicroC(a small subset of C).

Notifications You must be signed in to change notification settings

Maverick618/MicroC

Repository files navigation

MicroC

A simple compiler front-end for MicroC(a small subset of C).

数据类型和源程序结构

  • 变量必须先声明才能赋值
  • 变量类型只有int, char
  • 函数类型有void, int, char
  • 支持的运算有 + , -, *, /, <<, >>, &&, ||, ! , -(符号取反)
  • 不支持预处理语句
  • 赋值语句只能单独使用,不能放在表达式内部
  • 支持单行注释和多行注释
  • 支持全局变量
  • 变量可以在函数体的任意位置声明
  • 函数声明必须和定义一起
  • 预置input()函数用于输入,print()函数用于输出

错误处理

  • 尝试定义 void 型变量时会返回一个int类型
  • 使用未定义的变量时会抛出错误信息并以该名字声明一个值为0的int类型变量,以便后续分析
  • 变量的重复定义会抛出错误信息,在语法分析时会被忽略
  • 函数的参数定义重复,重复的参数会被抛弃并抛出错误信息
  • 存在隐式类型转换时会抛出警告
  • 调用函数时,参数数量有误,会抛出错误信息,当前函数调用作废,返回 0
  • 调用未定义的函数时,抛出错误信息,若有参数,参数将被抛弃,返回 0
  • 调用函数时,参数类型不对,会抛出警告信息,并尝试隐式类型转换。
  • 未定义main函数时会抛出错误信息。
  • 函数的重复定义将会引起错误并导致分析终止

结果

  • 输出三地址码文本文件 [源文件名]_out.txt
  • 输出语法分析树文本文件 [源文件名]_tree.txt
  • 输出分析中的错误信息 [源文件名]_error.txt

不足

  • 语法相对参考的TinyC而言丰富了不少,但整体来看还是太过简单。
  • 中间代码的输出形式和文法的属性定义上一开始设想的过于简单,导致后续即将完成时才反应过来无法实现逻辑运算的短路原则,这是此项目的最大败笔。
  • 一些错误处理不够恰当。
  • 暂未实现运行三地址码的模拟器。

语法参考:《自己动手写编译器》https://pandolia.net/tinyc/index.html

Notice

  • 需要PLY库支持: pip install ply
  • 将目标文件的路径写入main.py中,运行main.py即可得到输出

About

A simple compiler front-end for MicroC(a small subset of C).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published