Add GPL-3.0 license and update README with OS-level features
This commit is contained in:
@@ -1,61 +1,129 @@
|
||||
# Oraset3 编程语言
|
||||
|
||||
Oraset3 是一种现代化的通用编程语言,结合了 Go 的简洁性和 C++ 的性能。
|
||||
[](https://opensource.org/licenses/GPL-3.0)
|
||||
|
||||
Oraset3 是一种现代化的通用编程语言,结合了 Go 的简洁性和 C++ 的性能。编译为 C++ 代码,支持直接执行,语法简洁如 Python,性能接近 C++。
|
||||
|
||||
## 特性
|
||||
|
||||
- ✅ 简洁的语法,易于学习
|
||||
- ✅ 高性能的编译型语言(编译为 C++)
|
||||
- ✅ 跨平台支持(Windows/Linux)
|
||||
- ✅ 支持函数、变量声明、控制流等
|
||||
### 核心特性
|
||||
- ✅ **语法简洁** - 比 Python 更简洁,比 Go 更灵活
|
||||
- ✅ **高性能编译** - 编译为优化的 C++ 代码
|
||||
- ✅ **跨平台支持** - Windows/Linux/macOS
|
||||
- ✅ **无需主函数** - 顶层代码直接执行
|
||||
|
||||
### 操作系统级特性
|
||||
- ✅ **指针操作** - `&` 取地址,`*` 解引用
|
||||
- ✅ **位操作符** - `&`, `|`, `^`, `~`, `<<`, `>>`
|
||||
- ✅ **联合体(union)** - 内存重叠的数据结构
|
||||
- ✅ **枚举(enum)** - 类型安全的常量组
|
||||
- ✅ **类型转换** - C 风格类型转换 `(type)value`
|
||||
|
||||
### 语法示例
|
||||
```oraset
|
||||
// 变量声明(简洁语法)
|
||||
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
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### Windows
|
||||
### 编译 Oraset3 编译器
|
||||
|
||||
```bash
|
||||
g++ -std=c++17 -Wall -Iinclude src/cpp/lexer/lexer.cpp src/cpp/parser/parser.cpp src/cpp/semantic/semantic.cpp src/cpp/codegen/codegen.cpp src/cpp/compiler.cpp -o oraset3.exe
|
||||
# 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
|
||||
```
|
||||
|
||||
### Linux/Mac
|
||||
```bash
|
||||
g++ -std=c++17 -Wall -Iinclude src/cpp/lexer/lexer.cpp src/cpp/parser/parser.cpp src/cpp/semantic/semantic.cpp src/cpp/codegen/codegen.cpp src/cpp/compiler.cpp -o oraset3
|
||||
```
|
||||
### 运行 Oraset3 代码
|
||||
|
||||
## 使用
|
||||
|
||||
### 直接运行(推荐)
|
||||
```bash
|
||||
# 直接编译并运行 Oraset3 代码
|
||||
# 直接运行(推荐)
|
||||
./oraset3 input.ora
|
||||
```
|
||||
|
||||
### 编译到 C++ 文件
|
||||
```bash
|
||||
# 编译 Oraset3 源代码到 C++
|
||||
# 编译到 C++ 文件
|
||||
./oraset3 input.ora output.cpp
|
||||
|
||||
# 编译生成的 C++ 代码
|
||||
g++ -o output output.cpp
|
||||
|
||||
# 运行
|
||||
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](LICENSE) 许可证。
|
||||
|
||||
- 编译器源码(词法分析器、语法分析器、语义分析器、代码生成器)受 GPL-3.0 约束
|
||||
- Oraset3 语言语法、运行时库、以及编译生成的代码**不受此许可证约束**
|
||||
- 您可以自由使用 Oraset3 编写任何程序,包括私有和商业软件
|
||||
|
||||
## 示例代码
|
||||
|
||||
### Hello World
|
||||
```oraset
|
||||
func main() {
|
||||
var message string = "Hello, Oraset3!"
|
||||
printString(message)
|
||||
}
|
||||
|
||||
func printString(value string) {
|
||||
std::cout << value << std::endl;
|
||||
}
|
||||
println("Hello, Oraset3!");
|
||||
```
|
||||
|
||||
### 阶乘与斐波那契
|
||||
### 阶乘函数
|
||||
```oraset
|
||||
func factorial(n int) int {
|
||||
if (n <= 1) {
|
||||
@@ -64,64 +132,15 @@ func factorial(n int) int {
|
||||
return n * factorial(n - 1);
|
||||
}
|
||||
|
||||
func printFibonacci(n int) {
|
||||
var a int = 0;
|
||||
var b int = 1;
|
||||
var i int = 0;
|
||||
var temp int = 0;
|
||||
|
||||
while (i < n) {
|
||||
printInt(a);
|
||||
temp = b;
|
||||
b = a + b;
|
||||
a = temp;
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
println(factorial(5)); // 120
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
### 结构体
|
||||
```oraset
|
||||
struct Point { x: int; y: int; }
|
||||
|
||||
var p Point
|
||||
p.x = 10
|
||||
p.y = 20
|
||||
println(p.x + p.y)
|
||||
```
|
||||
Oraset3/
|
||||
├── src/
|
||||
│ ├── cpp/ # C++ 编译器核心
|
||||
│ │ ├── lexer/ # 词法分析器
|
||||
│ │ ├── parser/ # 语法分析器
|
||||
│ │ ├── semantic/ # 语义分析器
|
||||
│ │ └── codegen/ # C++ 代码生成器
|
||||
│ ├── go/ # Go 前端(Windows)
|
||||
│ └── clang/ # Clang 后端(Linux)
|
||||
├── include/ # 头文件
|
||||
├── tests/ # 测试用例
|
||||
├── examples/ # 示例代码
|
||||
└── docs/ # 文档
|
||||
```
|
||||
|
||||
## 编译器架构
|
||||
|
||||
Oraset3 编译器分为几个阶段:
|
||||
|
||||
1. **词法分析(Lexer)** - 将源代码分解为 token
|
||||
2. **语法分析(Parser)** - 根据语法规则构建抽象语法树(AST)
|
||||
3. **语义分析(Semantic Analyzer)** - 检查类型和变量声明
|
||||
4. **代码生成(Code Generator)** - 将 AST 转换为 C++ 代码
|
||||
|
||||
## 语言特性
|
||||
|
||||
- ✅ 变量声明 (`var x int = 42`)
|
||||
- ✅ 函数定义和调用
|
||||
- ✅ if/else 条件语句
|
||||
- ✅ while 循环
|
||||
- ✅ 基本表达式(+、-、*、/、<=、>= 等)
|
||||
- ✅ 结构体和接口定义
|
||||
- ✅ 嵌套调用
|
||||
- ✅ 递归函数
|
||||
|
||||
## 语言规范
|
||||
|
||||
参见 `docs/LANGUAGE_SPEC.md`
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT License
|
||||
Reference in New Issue
Block a user