项目简介
PorkchopLite是一个基于LLVM和Porkchop的编译器,它能够将Porkchop语言源代码编译为LLVM IR,并最终生成可执行文件或进行解释执行。该编译器支持多种输出格式,包含LLVM IR、Mermaid图和可执行文件。
项目的主要特性和功能
- 多格式输出:支持生成LLVM IR、Mermaid图和可执行文件。
- 调试信息:支持生成调试信息,方便进行代码调试。
- 多文件支持:支持多文件编译,可通过
export
和import
关键字实现模块化编程。 - 类型检查:具备严格的类型检查机制,保障代码的类型安全。
- 流程控制:支持
if
、while
等流程控制结构。 - 函数和变量声明:支持全局函数和变量的声明与定义。
- 指针支持:支持指针操作,可进行更复杂的内存管理。
- Unicode支持:源文件采用UTF - 8编码,标识符支持Unicode字符。
安装使用步骤
1. 安装依赖
使用PorkchopLite前,需安装Clang和LLVM,且确保使用LLVM 14版本,可通过以下命令安装:
bash
sudo apt install clang
sudo apt install llvm
2. 复制项目
将PorkchopLite项目复制到本地:
bash
cd PorkchopLite
3. 初始化项目
运行初始化脚本:
bash
bash init.sh
4. 编译项目
进入build
目录并运行编译脚本:
bash
cd build
bash pcmake.sh <args...>
5. 使用PorkchopLite
编译Porkchop源代码:
bash
PorkchopLite <input> <options...>
- <input>
:输入的Porkchop源代码文件。
- 选项:
- -o <output>
:指定输出文件名。
- -g
:生成调试信息。
- -l
:输出LLVM IR。
- -m
:输出Mermaid图。
6. 示例代码
项目/test
目录中包含示例代码,如选择排序示例代码:
porkchop
fn main() = {
let a = alloc(10 * sizeof(int)) as *int
a[0] = 1
a[1] = 2
let i = 2
while i < 10 {
a[i] = a[i - 1] + a[i - 2]
++i
}
print_int_array(a, 10)
sort(a, a + 10, greater)
print_int_array(a, 10)
sort(a, a + 10, less)
print_int_array(a, 10)
dealloc(a as *none)
}
编译并运行该代码,会输出排序后的整数数组。
7. 多文件编译
PorkchopLite支持多文件编译,例如:
porkchop
export fn hello() = 42
```porkchop
import "hello.pc"
fn main() = hello() ``` 以此实现模块化编程。
8. 类型和变量
PorkchopLite支持int
、float
、bool
等基本类型,可用let
关键字声明并初始化变量:
porkchop
fn main() = {
let a: int = 0
let b = 0.0
}
9. 运算符
支持算术运算符、位运算符、逻辑运算符和比较运算符,例如:
porkchop
fn main() = {
let a = 10
let b = 10.0
let c: int = a + b as int
let d: float = a as float + b
}
10. 流程控制
支持if
和while
等流程控制结构,例如:
porkchop
fn main() = {
let i = 1
let s = 0
while i < 10 {
s += i
i += 1
}
}
11. 全局函数和变量
支持全局函数和变量的声明与定义,例如: ```porkchop fn square(x: int) = { x * x }
let a = 1 let b = 1 + 1 ```
12. 指针
支持指针操作,可进行复杂的内存管理,例如:
porkchop
fn main() = {
let a = alloc(10 * sizeof(int)) as *int
a[0] = 1
dealloc(a as *none)
}
13. 语法糖
支持中缀函数调用等语法糖,例如: ```porkchop fn max(a: int, b: int) = if a > b {a} else {b}
fn main() = { 3 max 4 # 输出 4 } ```
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】