新创建一门中文编程语言,学习以上各语言的优点,无空格自然语序, 尽量双字关键词,百家姓开头的变量名,可导入python的宏,自举。 使用Tree-sitter(解析) + LLVM/MLIR(后端)
·
新创建一门中文编程语言,学习以上各语言的优点,无空格自然语序, 尽量双字关键词,百家姓开头的变量名,可导入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
- 完善Tree-sitter生成: 运行
tree-sitter generate生成C解析器,并构建Python绑定 - 修复LLVM代码生成器: codegen.py 当前存在标签命名重复、if/while循环的LLVM IR结构问题
- 添加真闭包/作用域: 当前函数体不支持嵌套作用域和闭包捕获
- 实现完整类型系统: 添加
整数/实数/字符串/布尔/空值类型检查 - 完善Python宏桥接: 实现
调用关键字到Python函数调用的自动转换 - 启动编译器自举: 用翰语写第一个自举编译器(词法分析器→解析器→代码生成)
Critical Context
- 分词难点已解决:CJK姓氏标识符+双字关键词+单字操作符可在无空格下通过最大匹配正确分词(如
定义赵甲=42打印赵甲→ 正确拆分为 定义/赵甲/= /42/打印/赵甲) ==!=>=<=在词法分析器中已作为双字符操作符处理- 当前Python原型编译通过所有端到端测试
- Windows终端无法正确显示汉字,但内部Unicode字符串正确
- Node.js v22.14.0 和 Python 3.12.9 可用;Rust/LLVM/
tree-sitterCLI 尚未安装
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个测试用例
更多推荐



所有评论(0)