Skip to content

AarenWang/haifa-python

Repository files navigation

Haifa Python 编译器与虚拟机

Haifa Python 是一个教学友好、可视化友好的“字节码编译器 + 虚拟机”实验平台。在统一的 Core VM 上,项目同时承载:

  • jq 风格 JSON 处理运行时(JQ)
  • Lua 子集解释执行(Lua)

你可以从“源代码/脚本 → AST → 字节码 → 虚拟机执行”的完整链路中学习、实验和扩展,并用 GUI/终端可视化器实时观察执行过程。

1. 项目快速入手

  • 环境准备

    • Python 3.11+(推荐虚拟环境)
    • 一键创建/激活并安装依赖:
      source scripts/activate_venv.sh
      # 如需 GUI 可视化,请额外安装 pygame
      pip install pygame
    • 运行测试:pytest
  • 体验 Lua(pylua)

    • 运行脚本:pylua examples/hello.lua
    • 单行执行:pylua -e 'x=1; y=2; return x+y' --print-output
    • REPL:pylua --repl
    • 可视化执行:
      • GUI:pylua examples/coroutines.lua --visualize
      • 终端:pylua examples/coroutines.lua --visualize curses
  • 体验 jq(pyjq)

    • 从文件:pyjq '.items | map(.name)' --input data.json
    • 从标准输入:cat data.json | pyjq '.items[] | .price'
    • 可视化(终端):python -m compiler.jq_cli '.[]' --input data.json --visualize curses

提示:GUI 可视化器依赖 pygame;若没有图形环境或导入失败,会自动回退到 curses 终端模式。

2. 本项目快速介绍

  • 完整流水线:源/脚本 → 词法/语法 → AST → 字节码 → Core VM → 可视化
  • 分层设计:核心指令集精简通用;JQ/Lua 分别在其上提供语义与标准库
  • 可视化调试:pygame GUI 与 curses 终端两种形态;支持协程事件时间线、寄存器变更高亮、指令搜索、执行轨迹导出
  • 测试与样例:200+ 测试与多份示例脚本,覆盖从指令到 CLI 的端到端路径

3. 项目架构概览

  • Core 层(compiler/

    • bytecode.py:指令与调试元信息
    • bytecode_vm.py:字节码虚拟机(寄存器模型、调用栈、事件/快照)
    • 可视化:vm_visualizer.py(GUI)、vm_visualizer_headless.py(curses)
  • JQ 层(compiler/

    • jq_parser.py / jq_ast.py / jq_compiler.py:jq 解析与编译
    • jq_vm.py:JQVM(在 Core VM 上扩展)
    • jq_cli.py:命令行入口(pyjq
  • Lua 层(haifa_lua/

    • 前端:lexer.pyparser.pycompiler.py
    • 运行时:runtime.pyenvironment.pystdlib.pycoroutines.py
    • 命令行:cli.pypylua

4. 代码层次与常用入口

  • 指令分层

    • Core Opcode:算术/逻辑/跳转/表/闭包/多返回等通用操作(compiler/bytecode.py
    • JQ Opcode:对象访问、迭代、聚合、字符串等(compiler/jq_*
    • 执行单元:BytecodeVM 仅实现 Core;JQVM 在其上扩展 JQ 指令
  • CLI 与示例

    • CLI:pyluapyjq
    • 示例:examples/*.lua;基准:benchmark/scripts/*.lua
    • 可视化:--visualize [gui|curses](Lua 与 jq 均支持)

5. 相关文档索引

  • 语言/运行时与计划

    • docs/lua_sprint.md:Lua 解释器里程碑与计划(含协程 API 完备)
    • docs/lua_guide.md:Lua 实践指南与示例
    • docs/jq_design.md:jq 设计与指令分层
  • 可视化与调试

    • knowledge/07-debugger-architecture.md:调试器架构与原则
    • knowledge/09-coroutine-visualizer-and-error-plan.md:协程事件与错误展示计划
  • 性能与基准

    • docs/performance_benchmark.md:Lua 解释器性能基准方案
    • benchmark/:脚本、运行器与报告示例

附注

  • GUI 中文显示:若 pygame GUI 无法显示中文,可在 compiler/vm_visualizer.py 中改用指定字体文件,例如:
    # 替换 SysFont 为系统字体文件(示例)
    self.font = pygame.font.Font('/System/Library/Fonts/PingFang.ttc', FONT_SIZE)
    也可以将字体文件放入项目并用相对路径加载。
  • 在非图形环境下,使用 --visualize curses 进入终端可视化模式。

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages