新创建一门中文编程语言,学习以上各语言的优点,无空格自然语序, 尽量双字关键词,百家姓开头的变量名,可导入python的宏,自举。 使用Tree-sitter(解析) + LLVM/MLIR(后端) 。

OpenCode的工作

Goal

  • 创建一门无空格自然语序、双字关键词、百家姓变量名、可导入Python宏、自举的中文编程语言,使用Tree-sitter + LLVM/MLIR,融合8个已有中文语言项目的优点

Constraints & Preferences

  • 无空格自然语序: CJK字符连续书写,最大匹配分词(maximal munch),无需空格分隔
  • 双字关键词: 全部核心关键词为2个汉字(如定义 函数 返回 如果 那么 否则 循环 当满 打印 导入 宏用 结构 产出
  • 百家姓变量名: 所有用户标识符(变量/函数/结构名)必须以百家姓姓氏字符开头(赵钱孙李周吴郑王...)
  • Python宏宏用Python导入...为... 语法,运行时import Python模块
  • 自举: 编译器最终用翰语编写自身
  • 技术栈: Tree-sitter(解析器生成) + LLVM/MLIR(后端代码生成)
  • 借鉴源: 言(Yan)Python风格、知行(Zhixing)极简体、言知(Yanzhi)自然句式、心语(Xinyu)简洁、墨言(Moyan)管道、言律(Yanlv)Racket后端、明道(Mingdao)双字+产出

Progress

Done

  • 项目目录创建G:\opencode\hanyu\ 下创建 grammar/ src/hanyu/ samples/ tests/ bindings/python/
  • 设计语言规范: 关键词表、百家姓字符集、操作符表、语法规则均已定义
  • Tree-sitter grammar.js: 完整的多功能语法定义(含百家姓字符集)
  • Python词法分析器 (lexer.py): 实现无空格CJK最大匹配分词,包含姓氏标识符/关键字/操作符/ASCII-CJK边界处理
  • Python解析器 (parser.py): 递归下降解析,支持 定义/函数/返回/if-else/循环当满/for/break/continue/导入/宏用Python/结构/产出/表达式/函数调用/二元运算/一元运算/列表/字典
  • AST节点 (ast.py): Program, Definition, Assignment, FunctionDef, ReturnStmt, IfStmt, WhileStmt, ForStmt, BreakStmt, ContinueStmt, YieldStmt, ImportStmt, PythonImportStmt, StructDef, ExpressionStmt, BinaryExpr, UnaryExpr, FunctionCall, Identifier, NumberLiteral, StringLiteral, BooleanLiteral, ListLiteral, DictLiteral
  • LLVM IR代码生成器 (codegen.py): 基础LLVM IR发射(整数运算、print、函数定义、if、while)
  • Python宏导入器 (python_macro.py): 基于 importlib 的运行时Python模块导入
  • 编译器主入口 (compiler.py): 支持文件编译和REPL模式
  • 示例程序: hello.翰, pipe.翰, python_macro.翰, struct.翰, generator.翰, selfhost.翰
  • 测试: test_lexer.py (8个), test_parser.py (5个), test_end_to_end.py (8个)
  • 项目配置: pyproject.toml, package.json, .gitignore, README.md, Tree-sitter Python bindings

In Progress

  • (none)

Blocked

  • (none)

Key Decisions

  • 百家姓作为标识符首字符: 所有用户标识符必须以百家姓字符开头,确保与双字关键词无冲突,支持最大匹配分词
  • 函数参数用括号函数孙加(赵x): 解决无空格下函数名与参数无法分隔的问题;函数调用用并列 孙加41
  • ASCII/CJK边界分词: ASCII字母序列和CJK字符序列自动分为不同token(Python导入 → Python + 导入
  • 使用作为可选语句终止符: 解决无空格下语句边界歧义,块内语句用分隔
  • 产出作为语句级关键字: 生成器yield在解析器中作为statement处理,不混入expression
  • 打印等内置函数作为IDENTIFIER: 通过 BUILTIN_FUNCTIONS 集合提供分词边界,但解析器按函数调用处理

Next Steps

  1. 完善Tree-sitter生成: 运行 tree-sitter generate 生成C解析器,并构建Python绑定
  2. 修复LLVM代码生成器: codegen.py 当前存在标签命名重复、if/while循环的LLVM IR结构问题
  3. 添加真闭包/作用域: 当前函数体不支持嵌套作用域和闭包捕获
  4. 实现完整类型系统: 添加 整数/实数/字符串/布尔/空值 类型检查
  5. 完善Python宏桥接: 实现 调用 关键字到Python函数调用的自动转换
  6. 启动编译器自举: 用翰语写第一个自举编译器(词法分析器→解析器→代码生成)

Critical Context

  • 分词难点已解决:CJK姓氏标识符+双字关键词+单字操作符可在无空格下通过最大匹配正确分词(如 定义赵甲=42打印赵甲 → 正确拆分为 定义/赵甲/= /42/打印/赵甲)
  • == != >= <= 在词法分析器中已作为双字符操作符处理
  • 当前Python原型编译通过所有端到端测试
  • Windows终端无法正确显示汉字,但内部Unicode字符串正确
  • Node.js v22.14.0 和 Python 3.12.9 可用;Rust/LLVM/tree-sitter CLI 尚未安装

Relevant Files

  • G:\opencode\hanyu\grammar\grammar.js: Tree-sitter语法定义(含百家姓字符集)
  • G:\opencode\hanyu\src\hanyu\lexer.py: 无空格CJK最大匹配分词器(核心创新)
  • G:\opencode\hanyu\src\hanyu\parser.py: 递归下降解析器
  • G:\opencode\hanyu\src\hanyu\ast.py: AST节点定义
  • G:\opencode\hanyu\src\hanyu\codegen.py: LLVM IR代码生成(需要修复)
  • G:\opencode\hanyu\src\hanyu\compiler.py: 编译器主入口
  • G:\opencode\hanyu\src\hanyu\python_macro.py: Python模块导入桥接
  • G:\opencode\hanyu\samples\*.翰: 6个示例程序覆盖所有特性
  • G:\opencode\hanyu\tests\test_*.py: 3个测试文件,共21个测试用例
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐