3.7 KiB
3.7 KiB
Oraset3 编程语言
Oraset3 是一种现代化的通用编程语言,结合了 Go 的简洁性和 C++ 的性能。编译为 C++ 代码,支持直接执行,语法简洁如 Python,性能接近 C++。
特性
核心特性
- ✅ 语法简洁 - 比 Python 更简洁,比 Go 更灵活
- ✅ 高性能编译 - 编译为优化的 C++ 代码
- ✅ 跨平台支持 - Windows/Linux/macOS
- ✅ 无需主函数 - 顶层代码直接执行
操作系统级特性
- ✅ 指针操作 -
&取地址,*解引用 - ✅ 位操作符 -
&,|,^,~,<<,>> - ✅ 联合体(union) - 内存重叠的数据结构
- ✅ 枚举(enum) - 类型安全的常量组
- ✅ 类型转换 - C 风格类型转换
(type)value
语法示例
// 变量声明(简洁语法)
name := "Oraset3"
age := 1
// 位操作
a := 10 // 0b1010
b := 12 // 0b1100
println(a & b) // 8
println(a | b) // 14
println(a ^ b) // 6
// 枚举
enum Color { RED, GREEN, BLUE = 10 }
// 联合体
union Data { i: int; f: float }
// 指针操作
x := 100
ptr := &x
*ptr = 200 // 通过指针修改值
// 类型转换
num := 3.14
intNum := (int)num // 3
快速开始
编译 Oraset3 编译器
# Windows (MinGW)
g++ -std=c++20 -Iinclude src/cpp/*.cpp src/cpp/lexer/*.cpp src/cpp/parser/*.cpp src/cpp/semantic/*.cpp src/cpp/codegen/*.cpp -o oraset3.exe -mconsole
# Linux/macOS
g++ -std=c++20 -Iinclude src/cpp/*.cpp src/cpp/lexer/*.cpp src/cpp/parser/*.cpp src/cpp/semantic/*.cpp src/cpp/codegen/*.cpp -o oraset3
运行 Oraset3 代码
# 直接运行(推荐)
./oraset3 input.ora
# 编译到 C++ 文件
./oraset3 input.ora output.cpp
# 编译生成的 C++ 代码
g++ -std=c++20 -o output output.cpp
./output
项目结构
Oraset3/
├── src/
│ ├── cpp/ # C++ 编译器核心
│ │ ├── lexer/ # 词法分析器
│ │ ├── parser/ # 语法分析器
│ │ ├── semantic/ # 语义分析器
│ │ └── codegen/ # C++ 代码生成器
│ └── go/ # Go 前端
├── include/ # 头文件和内置库
│ └── fdan.orh # 内置函数库
├── tests/ # 测试用例
│ ├── test_os_features.ora # 操作系统特性测试
│ ├── test_bitops.ora # 位操作测试
│ ├── test_enum.ora # 枚举测试
│ └── test_union.ora # 联合体测试
└── docs/ # 文档
内置函数
| 函数 | 说明 |
|---|---|
println(x) |
打印并换行 |
print(x) |
打印不换行 |
input() |
读取一行输入 |
int(x) |
转换为整数 |
float(x) |
转换为浮点数 |
string(x) |
转换为字符串 |
len(x) |
获取长度 |
sys(cmd) |
执行系统命令 |
许可
本项目采用 GPL-3.0 许可证。
- 编译器源码(词法分析器、语法分析器、语义分析器、代码生成器)受 GPL-3.0 约束
- Oraset3 语言语法、运行时库、以及编译生成的代码不受此许可证约束
- 您可以自由使用 Oraset3 编写任何程序,包括私有和商业软件
示例代码
Hello World
println("Hello, Oraset3!");
阶乘函数
func factorial(n int) int {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
println(factorial(5)); // 120
结构体
struct Point { x: int; y: int; }
var p Point
p.x = 10
p.y = 20
println(p.x + p.y)