/cmm-compiler

Compiler of the subset of C language C--

Primary LanguageC++GNU General Public License v3.0GPL-3.0

C-- Compiler

一个C--编译器,实现了C语言功能的子集。

还包含一个前端UI和解释执行程序。

目录

安装

  • github下载最新的release,并保存到希望运行的目录

使用

  • 在本地使用:双击cmm.exe,会自动打开浏览器访问127.0.0.1:8810,如果没有则需要手动打开浏览器访问上述网址。

支持的语法及功能

本语言的规则基本与C语言类似,具体支持的语法与功能如下。

词法部分

这一部分说明支持的关键字,符号和标识符命名规则等支持的词法。

可以通过修改compiler/language.txt文件来修改词法规则。

关键字

关键字表
数据类型 const int char void
分支与循环 if else do while for
特殊 scanf printf return main

运算符

运算符表
算数运算符 + - * /
比较运算符 < <= > >= == !=
特殊运算符 = ; ,
括号运算符 () [] {}
字符与字符串 '' ""

标识符

变量、常量、函数的标识符支持以下划线_、大小写字母开头a-zA-Z,随后跟随任意个下划线_、数字0-9或大小写字母a-zA-Z

常量

数字支持含前导0的数字。
字符常量支持单引号'引起的+-*/_a~zA~Z0~9
字符串常量支持双引号"引起的十进制编码为32,33,35-126的ASCII字符。

语法

常量与变量定义

常量与变量的定义应该在代码或者函数体的开头处。
具体定义方式与C语言相同。

分支与循环

if-elseforwhiledo-while语句的使用方式与C语言相同。

其中条件表达式仅支持int类型的表达式,或两个int类型表达式做比较。

函数

函数支持有返回值intchar和无返回值void
函数可以包含任意个数的参数。

特殊函数

main函数必须定义为void main(){}

printf输出函数支持的参数为字符串表达式字符串,表达式
字符串,表达式会在连续输出字符串和表达式的值。

scanf读入函数支持一个或多个逗号,隔开的变量做为参数,从左到右从标准输入读入。

实现技术细节

实现技术见docs/doc.md