Skip to content

jnhu76/pineapple

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍍 Pineapple

C++20 License Build Status

一个使用现代C++20实现的Pineapple语言解释器,具有高性能、内存安全和良好的错误处理特性。

📖 关于项目

Pineapple是一种简单的脚本语言,支持变量赋值和打印功能。本项目是其C++实现,采用了现代C++20特性,包括:

  • std::string_view用于零拷贝字符串处理
  • std::variant实现类型安全的AST节点
  • std::optional处理可选值
  • 结构化绑定和移动语义
  • RAII资源管理
  • 异常安全的错误处理

原项目地址:https://github.com/karminski/pineapple

✨ 特性

  • 🚀 高性能:使用现代C++优化,零拷贝字符串处理
  • 🛡️ 内存安全:RAII资源管理,无内存泄漏
  • 🎯 错误处理:详细的错误信息和异常安全保证
  • 📖 简单易用:简洁的语法和直观的API
  • 🔧 现代构建:使用xmake构建系统,支持多种配置

🛠️ 构建要求

  • C++20兼容编译器(推荐Clang 12+或GCC 10+)
  • xmake构建系统
  • CMake(可选,用于IDE集成)

📦 安装与构建

  1. 克隆仓库:
git clone https://github.com/your-username/pineapple.git
cd pineapple
  1. 构建项目:
xmake build
  1. 运行示例:
xmake run pineapple hello-world.pineapple

🚀 快速开始

基本语法

Pineapple支持两种基本操作:变量赋值和打印。

# 变量赋值
$a = "Hello, World!"

# 打印变量
print($a)

示例代码

创建一个名为example.pineapple的文件:

# 基本示例
$greeting = "Hello, Pineapple!"
print($greeting)

# 多行字符串
$multiline = "
This is a
multi-line string
example.
"
print($multiline)

# 变量重新赋值
$message = "Original message"
$message = "Updated message"
print($message)

运行示例:

./pineapple example.pineapple

🔧 开发指南

项目结构

pineapple/
├── src/
│   ├── main.cpp          # 主程序入口
│   ├── pineapple.h       # 核心实现(头文件)
│   └── tests.cpp         # 测试代码
├── hello-world.pineapple # 示例代码
├── xmake.lua            # 构建配置
└── README.md            # 项目文档

技术实现

本项目采用经典解释器架构:

  1. 词法分析器(Lexer):将源代码转换为标记流
  2. 语法分析器(Parser):构建抽象语法树(AST)
  3. 解释器(Interpreter):执行AST节点

核心组件

  • Token系统:使用强类型枚举定义标记类型
  • AST节点:使用std::variant实现类型安全的节点表示
  • 访问者模式:使用std::visit和重载函数对象实现AST遍历

内存管理

项目采用RAII原则,确保资源自动释放:

  • 使用智能指针管理动态内存
  • 移动语义减少不必要的拷贝
  • string_view避免字符串拷贝

测试

运行测试:

xmake build tests
./tests

内存检查

使用Valgrind进行内存泄漏检测:

xmake f -m valgrind
xmake build
valgrind --tool=memcheck --leak-check=full ./pineapple

🤝 贡献指南

欢迎贡献代码!请遵循以下步骤:

  1. Fork本项目
  2. 创建特性分支:git checkout -b feature/amazing-feature
  3. 提交更改:git commit -m 'Add amazing feature'
  4. 推送到分支:git push origin feature/amazing-feature
  5. 创建Pull Request

代码规范

  • 遵循现代C++最佳实践
  • 使用clang-format格式化代码
  • 添加适当的注释和文档
  • 确保所有测试通过

📄 许可证

本项目采用MIT许可证 - 查看LICENSE文件了解详情。

🙏 致谢

  • 感谢karminski创建的原始Pineapple项目
  • 感谢所有贡献者的努力

📞 联系方式

如有问题或建议,请通过以下方式联系:


⭐ 如果这个项目对你有帮助,请给它一个星标!

About

pineapple lang 的C++实现。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published