# mc **Repository Path**: ming-lang/mc ## Basic Information - **Project Name**: mc - **Description**: Ming Compiler,明语言的编译工具链 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-29 - **Last Updated**: 2024-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 明语言 明语言的目标是:**成为最强的生态融合语言**! 要融合哪几个生态呢? - C:后端开发、嵌入式、操作系统、机器人。 - Python:AI开发、数据分析。 - JS:前端开发、跨平台应用。 本工程是明语言的编译器,我同时还配套了明语言的同步开源书: [《明语言炼成记》](https://gitee.com/ming-lang/dev-book)。 这本书将和编译器的代码同步更新。 欢迎大家一起讨论和学习! ## 编译器 明语言的编译器框架有以下几个部分: - 前端:用tree-sitter实现 - 中端: - 解释器 - 后端: - m2py:将明语言转译成Python - m2c:将明语言转译成C语言 - m2js:将明语言转译成JavaScript - 工具: - vscode-ming:VSCode的插件 - LSP 因此,这个编译器和Z语言编译器不同,前端和工具用JS实现,中后端用Python来实现。 ## 语法概览 下面是明语言大致的语法: ```js /********** /* 基本类型 /**********/ 1 // 整数 3.14 // 浮点数 "Hello, world!" // 字符串 true // 布尔值 false // 布尔值 /********* /* 运算 /*********/ -2 // 负数 !true // 逻辑非 (0+2*3-4)/5 // 四则运算 5+4 == 9 // 比较运算 /********* /* 存量 /*********/ const PI = 3.1415926 // 常量const let a = 10 // 定量let mut b = 5.20 // 变量mut b = 13.14 // mut变量可以重新赋值 var c = 3 c = "Hello" // var变量可以改变类型 /********* /* 函数 /*********/ // 函数定义和Go比较像。函数的关键字是`fn`。明语言里函数默认是纯函数,即不能产生副作用。 fn add(a int, b int) int { // 代码块的最后一个语句即是返回值 a + b } // 函数调用 add(5, 8) // fn mut表示函数可以产生副作用 fn mut writeFile(name str, s str) bool { let f = open(name, W) // 和Go语言类似的defer语句 defer f.close() f.write(s) true } // fn var表示函数是动态类型,与JS、Python类似。 fn var make_obj(message) { // 局部导入 use time:now // 类JSON var obj = { time: now() arr: [n*n for n in 1..10] // list comprehension message: message } obj } // main函数是特殊的函数,它是程序的入口。不需要指定mut或var。 fn main { // 函数调用与C一致。 print("Hello, world!") // 语句结尾不需要';'。 // 明语言支持嵌入字符串。这里PI值被直接嵌入到字符串里了。 print("Here is pi: ${PI}") // let标量,类似于C的变量,但它的值是不可变的。 let a int = 10 // 可以在变量名称后直接指定类型,如果不指定,编译器会自动推导。 a = 12 // 错误!a是不可变的量。 // mut变量。这个相当于C语言里的普通变量。 mut b = 5 // 支持基本的类型推导。 b = b * 2 // 正确!b是可变量。 b = "明语言" // 错误!不能改变变量的类型。 // var幻量。这个相当于JavaScript里的var变量,不但值可以变,类型也可以变。 var c = 5 c = "明语言" // 正确!c是幻量,可以从整数类型变成字符串。 print("a+b is $add(a, b)") } ```