# tphp **Repository Path**: kllxs_admin/tphp ## Basic Information - **Project Name**: tphp - **Description**: 一个小型的PHP跨平台AOT编译器,内置GC垃圾回收机制,支持Windows、Linux、macOS等平台。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-08-08 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TPHP > 一个小型的PHP跨平台AOT编译器,内置GC垃圾回收机制,支持Windows、Linux、macOS等平台。 ## 项目简介 TPHP是一个轻量级的PHP AOT( Ahead-of-Time )编译器,它将PHP代码编译为C99代码,然后通过系统编译器(如gcc、clang、tcc等)编译为可执行文件。TPHP的设计目标是提供一种简单、高效的方式来运行PHP代码,特别适合需要高性能的场景。 ### 主要特性 - **跨平台支持**:可以在Windows、Linux、macOS等平台上运行 - **内置垃圾回收**:集成了GC垃圾回收机制,无需手动管理内存 - **高性能**:通过编译为本地代码,提供比解释执行更高的性能 - **简洁语法**:支持PHP的核心语法特性,保持代码的可读性和简洁性 ## 支持的PHP特性 ### 变量类型 - `int`:整数类型 - `float`:浮点数类型 - `string`:字符串类型 - `bool`:布尔类型 - `null`:空值类型 - `array`:数组类型 ### 运算符 - **算术运算符**:`+`, `-`, `*`, `/`, `%` - **比较运算符**:`==`, `!=`, `<`, `>`, `<=`, `>=` - **字符串运算符**:`.` (字符串连接) ### 控制结构 - `if` / `else`:条件判断 - `while`:while循环 - `for`:for循环 - `switch` / `case` / `default`:开关语句 - `break` / `continue`:循环控制 - `goto`:跳转语句 ### 函数和命名空间 - **函数**:支持自定义函数、闭包函数 - **命名空间**:支持命名空间,用于组织代码结构 - **注意**:不支持面向对象编程(OOP) ## 安装和使用 ### 安装依赖 TPHP需要以下依赖: - PHP 8.0 或更高版本(用于运行TPHP编译器) - C编译器(如gcc、clang、tcc等,用于编译生成的C代码) ### 使用方法 1. **准备PHP代码**:创建一个包含`Main`命名空间和`main`函数的PHP文件 2. **编译代码**:使用TPHP编译器编译PHP代码 3. **运行可执行文件**:执行生成的可执行文件 ### 编译命令 ```bash # 基本用法 php bin/tphp.php [output.exe] # 示例 php bin/tphp.php test/main.php test/main.exe ``` ## 使用示例 ### 基本示例 入口逻辑必须是`Main`命名空间的`main`函数。 ```php ``` ### 高级示例 下面是一个包含函数调用、变量使用和控制结构的示例: ```php ``` ## 工作原理 TPHP的编译过程分为以下几个步骤: 1. **词法分析**:将PHP代码转换为词法单元(tokens) 2. **语法分析**:根据词法单元生成抽象语法树(AST) 3. **语义分析**:对AST进行语义检查和类型推断 4. **代码优化**:对AST进行优化,包括常量折叠、死代码消除等 5. **代码生成**:将优化后的AST转换为C99代码 6. **编译链接**:使用系统编译器将C99代码编译为可执行文件 ### 编译流程图 ``` PHP代码 → 词法分析 → 语法分析 → 语义分析 → 代码优化 → C99代码 → 编译链接 → 可执行文件 ``` ## 技术细节 ### 内存管理 TPHP使用内置的垃圾回收(GC)机制来管理内存,它会自动回收不再使用的内存,避免内存泄漏。 ### 类型系统 TPHP的类型系统基于PHP的动态类型,但在编译时会进行类型推断和检查,确保类型安全。 ### 代码生成 TPHP生成的C99代码使用了一系列辅助函数和数据结构来模拟PHP的运行时环境,包括: - `VarValue`:表示PHP变量的值和类型 - `intAdd`, `intSub`等:实现PHP的运算符 - `TPHP_createVarInt`, `TPHP_createVarString`等:创建不同类型的PHP变量 ## 限制和注意事项 1. **命名空间要求**:入口函数必须位于`Main`命名空间中,并且函数名必须为`main` 2. **无OOP支持**:不支持类、对象、继承等面向对象特性 3. **有限的标准库**:只支持基本的PHP语法和功能,不支持PHP的标准库函数 4. **内存限制**:由于使用了GC,可能会有一定的内存开销 ## 故障排除 ### 常见错误 1. **"Expected token RPAREN, got STRING"**:语法错误,可能是括号不匹配或字符串格式不正确 2. **"Type mismatch error"**:类型错误,可能是尝试对不兼容的类型进行操作 3. **"Compilation failed"**:C代码编译失败,可能是缺少C编译器或编译器配置不正确 ### 解决方法 - 检查PHP代码的语法是否正确 - 确保所有变量使用正确的类型 - 安装并配置好C编译器 - 查看生成的C代码,了解具体的错误原因 ## 测试用例 TPHP包含以下测试用例,用于验证编译器的功能: - `test/main.php`:基本功能测试 - `test/var.php`:变量类型测试 - `test/number.php`:数值运算测试 - `test/control.php`:控制结构测试 - `test/function.php`:函数调用测试 ## 贡献 欢迎对TPHP项目做出贡献!您可以: 1. 报告bug和提出建议 2. 改进代码质量和性能 3. 添加新功能和特性 4. 编写测试用例 ## 许可证 TPHP使用MIT许可证,详见`LICENSE`文件。 ## 致谢 感谢所有为TPHP项目做出贡献的开发者和用户!