• TinyCMips


    TinyCMips是我最近在写的一个编译器,就像标题所说,是一个C语言子集到Mips子集的编译器,开这个坑的目的大概是这样的

    1. 就是为了写一个完整的编译器
    2. 准备大三编译原理课拿来复用
    3. 大二他们上计组课的可以拿来将C代码编译到课程用的Mips CPU
    4. 满足个人兴趣
    5. 充实简历

    之所以选择C语言并且是子集,首先是因为C标准十分庞大,其次是因为这个编译器是尝试给大二他们用在计组课上的,目标CPU只支持20余条指令,也不需要太多的功能,再次是因为C语言其中有一些糟粕的东西应当剔除,比如前后置++,连续赋值等。所以这个项目选择一个C语言的子集。因为是子集,所以所有能通过TinyCMips编译的代码理应能通过正常的Standard C编译器的编译。

    语言的便宜目标是Mips,因为课程所用的Mips CPU只支持少量指令,所以并不能用市面上现成的可以编译到Mips目标的编译器,因此要自己写。

    语言本身被我剔除的feature包括:

    • 所有的storage-class-specifier (auto static typedef…)
    • 所有的type-specifier (const volatile restrict)
    • 所有的function-specifier (inline)
    • 一部分type-specifier (去除enum struct union 浮点类型等,只保留signed unsigned int char)
    • 去除前后置++—运算符
    • 去除连续赋值 (a = b = c)
    • 去除成员存取运算符 (. –> 因为根本没有struct union)
    • 去除常量和字符串字面量的前后缀 (0x10u L"string"…)
    • 去除浮点常量 (因为根本没有浮点类型)
    • 去除部分语句 (只保留while和if-else)

    可以看到语言本身是保留了所有数学运算符的,这也是为了面向课程需要。C语言中for和do while循环可以轻松转写为while循环,因此只保留一个,if-else与switch类似,只保留前者。

    假期刚刚开始,所以并没有写太多,词法分析已经写好了,语法分析中declarator和type-specifier的处理已经基本写好了,刚刚整理了一下表达式的文法,发现还挺麻烦的,都写出来纯粹是苦力活,也许我该写个parser generator?

    不管了先写着

    祝大家春节快乐

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/pointer-smq/p/6352150.html
Copyright © 2020-2023  润新知