Skip to content

A simple compiler for C minus, a simplified version of the C language.

License

Notifications You must be signed in to change notification settings

voidforall/c-minus-compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C-minus-compiler

运行说明

提供了Mac下可执行文件cminustm。如果是在Mac下测试,下面的make步骤可以跳过。否则请先删除这两个可执行文件,或者执行make clean来删除这些文件。否则请按下面步骤进行。

编译。在工程根目录下,执行make即可编译所有文件。生成的可执行文件为cminus

运行。使用方法为:

./cminus [input_file] [output_file]

其中,input_file是输入文件名,output_file是输出文件名。例如,要将demo/qsort.c编译成TINY机器码qsort.tm,则运行

./cminus demo/qsort.c qsort.tm

之后即可查看qsort.tm中的TINY机器码。除此之外,中间代码(三地址码)会输出在result.tac文件中。同时,词法分析,语法分析,符号表,报错信息都会输出到标准输出。若最后提示compilation completed则编译成功。

运行测试。生成的目标语言是TINY机器码,需要在TINY虚拟机上运行。首先编译TINY虚拟机:

make tm

TINY虚拟机的可执行文件为tm。要用TINY虚拟机运行qsort.tm,需要执行:

./tm qsort.tm

之后进行TINY虚拟机的命令行界面。首先会提示:

Enter command:

这个时候我们输入go,然后程序开始运行。当程序需要输入时会显示:

Enter value for IN instruction:

此时我们输入程序需要的整数即可。如果继续提示则继续输入。

测试样例

提供了三个测试样例demo/qsort.c, demo/search.c, demo/error.c,分别演示快排,二分搜索和错误处理。

下面介绍一下qsort.c的测试方法:

  1. 编译代码:./cminus demo/qsort.c qsort.tm

  2. 运行虚拟机:./tm qsort.tm

  3. 出现Enter command:后,输入go

  4. 之后会出现十次Enter value for IN instruction: 。我们任意输入10个数字。例如:

    Enter value for IN instruction: 3
    Enter value for IN instruction: 7
    Enter value for IN instruction: 2
    Enter value for IN instruction: 0
    Enter value for IN instruction: 5
    Enter value for IN instruction: 3
    Enter value for IN instruction: 2
    Enter value for IN instruction: 6
    Enter value for IN instruction: 7
    Enter value for IN instruction: 2
    
  5. 完成后,程序会输出排序的结果:

    OUT instruction prints: 0
    OUT instruction prints: 2
    OUT instruction prints: 2
    OUT instruction prints: 2
    OUT instruction prints: 3
    OUT instruction prints: 3
    OUT instruction prints: 5
    OUT instruction prints: 6
    OUT instruction prints: 7
    OUT instruction prints: 7
    
    

    下面介绍一下search.c的测试方法。这个程序执行二分查找。

    1. 编译代码:./cminus demo/search.c search.tm

    2. 运行虚拟机:./tm search.tm

    3. 出现Enter command:后,输入go

    4. 之后会出现十次Enter value for IN instruction: 。我们从小到大输入10个数字。例如:

      Enter value for IN instruction: 1
      Enter value for IN instruction: 5
      Enter value for IN instruction: 7
      Enter value for IN instruction: 8
      Enter value for IN instruction: 10
      Enter value for IN instruction: 14
      Enter value for IN instruction: 46
      Enter value for IN instruction: 355
      Enter value for IN instruction: 677
      Enter value for IN instruction: 789
      
    5. 第十一次,我们输入要查找的数字,例如:

      Enter value for IN instruction: 8
      
    6. 此时程序就会输出8所在的索引位置,即3.

要测试demo/error.c,运行./cminus demo/error.c error.tm即可。这个C程序有很多错误,编译器会将所有错误都报告:

Error in Line[10]: no return value expected
Error in Line[19]: Int return value expected
Error in Line[27]: assignment to an array variable
Error in Line[28]: index of a non-array variable is invalid
Error in Line[29]: the number of parameters is inconsistent with declaration
Error in Line[30]: invalid type in condition: Void
Error in Line[33]: the index of array should be Int type
Error in Line[35]: operand's type is invalid: void

About

A simple compiler for C minus, a simplified version of the C language.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •