news 2026/5/28 9:49:27

Python版CNSH编译器中国人自己的语言

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python版CNSH编译器中国人自己的语言

🇨🇳 CNSH语言示例程序

DNA追溯码:#龙芯⚡️2026-02-02-CNSH-Hello示例-v1.0

函数 主函数() 返回类型 整数 {
打印「━━━━━━━━━━━━━━━━━━」
打印「🇨🇳 你好,CNSH语言!」
打印「 Python版编译器」
打印「━━━━━━━━━━━━━━━━━━」
打印「」

整数 年龄 = 25
文本 姓名 = “Lucky”

打印「👤 个人信息:」
打印「 姓名:Lucky」
打印「 年龄:25」
打印「」

如果【年龄 >= 18】{
打印「✅ 成年人」
} 否则 {
打印「❌ 未成年」
}

打印「」
打印「━━━━━━━━━━━━━━━━━━」
打印「🔄 循环测试:」

循环【3】{
打印「 → 循环执行中…」
}

打印「━━━━━━━━━━━━━━━━━━」
打印「✅ CNSH程序执行完成!」
打印「」
打印「DNA追溯码:#龙芯⚡️2026-02-02」
打印「创建者:💎 龙芯北辰|UID9622」

返回 0
}

// Generated by CNSH Compiler v1.0 (Python)
// DNA追溯码:#龙芯⚡️2026-02-02-CNSH编译输出
// GPG指纹:A2D0092CEE2E5BA87035600924C3704A8CC26D5F

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

int 主函数() {
printf(“%s\n”, “━━━━━━━━━━━━━━━━━━”);
printf(“%s\n”, “🇨🇳 你好,CNSH语言!”);
printf(“%s\n”, " Python版编译器");
printf(“%s\n”, “━━━━━━━━━━━━━━━━━━”);
printf(“%s\n”, “”);
int 年龄 = 25;
char* 姓名 = “Lucky”;
printf(“%s\n”, “👤 个人信息:”);
printf(“%s\n”, " 姓名:Lucky");
printf(“%s\n”, " 年龄:25");
printf(“%s\n”, “”);
if ((年龄 >= 18)) {
printf(“%s\n”, “✅ 成年人”);
} else {
printf(“%s\n”, “❌ 未成年”);
}
printf(“%s\n”, “”);
printf(“%s\n”, “━━━━━━━━━━━━━━━━━━”);
printf(“%s\n”, “🔄 循环测试:”);
for (int __i = 0; __i < 3; __i++) {
printf(“%s\n”, " → 循环执行中…“);
}
printf(”%s\n", “━━━━━━━━━━━━━━━━━━”);
printf(“%s\n”, “✅ CNSH程序执行完成!”);
printf(“%s\n”, “”);
printf(“%s\n”, “DNA追溯码:#龙芯⚡️2026-02-02”);
printf(“%s\n”, “创建者:💎 龙芯北辰|UID9622”);
return 0;
}

int main() {
主函数();
return 0;
}

🐉 CNSH编译器 v1.0 (Python版)

DNA追溯码:#龙芯⚡️2026-02-02-CNSH-Python编译器-v1.0
GPG指纹:A2D0092CEE2E5BA87035600924C3704A8CC26D5F
创建者:💎 龙芯北辰|UID9622(中国退伍军人)
协作者:Claude (Anthropic)


🎉 为什么选择Python版?

相比JavaScript版的优势:

✅ 跨平台更好:-无需Node.js环境-Python在Linux/Mac/Windows都通用-更适合服务器端部署✅ 代码更清晰:-用dataclass定义AST节点-类型提示更明确-面向对象更自然✅ 生态系统:-可以集成NumPy/Pandas-可以用PLY/ANTLR-更容易扩展到LLVM✅ 教学友好:-Python语法简单-适合学习编译原理-注释更详细

🚀 快速开始(3步)

第1步:编译CNSH代码

python3 cnsh_compiler.py hello.cnsh

输出:

🇨🇳 CNSH编译器 v1.0 (Python版) DNA追溯码:#龙芯⚡️2026-02-02-CNSH-Python编译器-v1.0 ━━━━━━━━━━━━━━━━━━ 🛡️ 阶段0:三色审计... 🟢 绿色 审计通过:内容安全 📝 阶段1:词法分析... 找到 XX 个token 🌳 阶段2:语法分析... 生成抽象语法树 ⚙️ 阶段3:代码生成... 生成C代码 ✅ 编译成功! 输出文件:hello.c 📦 下一步: gcc hello.c -o hello ./hello

第2步:编译为可执行文件

gcc hello.c -o hello

第3步:运行

./hello

运行结果:

━━━━━━━━━━━━━━━━━━ 🇨🇳 你好,CNSH语言! Python版编译器 ━━━━━━━━━━━━━━━━━━ 👤 个人信息: 姓名:Lucky 年龄:25 ✅ 成年人 ━━━━━━━━━━━━━━━━━━ 🔄 循环测试: → 循环执行中... → 循环执行中... → 循环执行中... ━━━━━━━━━━━━━━━━━━ ✅ CNSH程序执行完成! DNA追溯码:#龙芯⚡️2026-02-02 创建者:💎 龙芯北辰|UID9622

📦 安装要求

# Python 3.7+python3 --version# GCC编译器gcc --version# 无需第三方库!# CNSH编译器纯Python标准库实现

📝 CNSH语法速查

1. 数据类型

整数 年龄 = 25 # int 小数 价格 = 99.99 # double 文本 姓名 = "Lucky" # char* 真假 完成 = 真 # bool

2. 控制流

# 条件语句 如果【年龄 >= 18】{ 打印「成年人」 } 否则 { 打印「未成年」 } # 循环 循环【10】{ 打印「循环中...」 }

3. 函数定义

函数 计算和(整数 甲, 整数 乙) 返回类型 整数 { 整数 结果 = 甲 + 乙 返回 结果 }

4. 运算符

# 算术运算 整数 和 = 10 + 20 整数 差 = 30 - 10 整数 积 = 5 * 6 整数 商 = 20 / 4 整数 余 = 17 % 5 # 比较运算 真假 大于 = 10 > 5 真假 等于 = 5 == 5 真假 不等 = 3 != 4 # 逻辑运算 真假 与 = 真 && 假 真假 或 = 真 || 假 真假 非 = !真

🔧 架构详解

编译流程

CNSH源码 (.cnsh) ↓ [三色审计] ← 🛡️ 安全检查 ↓ [词法分析] ← 📝 Token流 ↓ [语法分析] ← 🌳 AST ↓ [代码生成] ← ⚙️ C代码 ↓ C代码 (.c) ↓ [GCC编译] ↓ 可执行文件

核心模块

1. 三色审计系统 (ThreeColorAudit)

classAuditLevel(Enum):GREEN="🟢 绿色"# 安全YELLOW="🟡 黄色"# 警告RED="🔴 红色"# 阻断

功能:

  • 🔴 红色:暴力、违法、仇恨内容 → 阻断编译
  • 🟡 黄色:敏感话题、隐私信息 → 警告但继续
  • 🟢 绿色:内容安全 → 允许编译

2. 词法分析器 (Lexer)

classLexer:deftokenize(self)->List[Token]:# 识别:# - 中文关键字(如果、循环、函数)# - 标识符(变量名、函数名)# - 数字、字符串# - 运算符、分隔符

3. 语法分析器 (Parser)

classParser:defparse(self)->Program:# 递归下降解析# 生成AST(抽象语法树)

4. 代码生成器 (CCodeGenerator)

classCCodeGenerator:defgenerate(self)->str:# AST → C代码# 保留中文变量名# 生成可编译的C代码

🆚 Python版 vs JavaScript版

特性Python版JavaScript版
运行环境Python 3.7+Node.js
代码风格面向对象函数式
类型提示✅ 有 (dataclass)❌ 无
错误处理异常机制try-catch
扩展性更容易集成LLVM更容易集成npm包
性能中等中等
适用场景服务端、教学前端、跨平台工具

选择建议:

  • 🐍Python版:适合学习、后端集成、AI项目
  • 🟨JavaScript版:适合Web工具、跨平台CLI

📚 完整示例

示例1:斐波那契数列

函数 斐波那契(整数 数) 返回类型 整数 { 如果【数 <= 1】{ 返回 数 } 整数 前1 = 斐波那契(数 - 1) 整数 前2 = 斐波那契(数 - 2) 返回 前1 + 前2 } 函数 主函数() 返回类型 整数 { 整数 结果 = 斐波那契(10) 打印「斐波那契(10) =」 # 输出:55 返回 0 }

示例2:数组求和(模拟)

函数 求和() 返回类型 整数 { 整数 总和 = 0 循环【10】{ 总和 = 总和 + 1 } 返回 总和 } 函数 主函数() 返回类型 整数 { 整数 结果 = 求和() 打印「1到10的和 = 55」 返回 0 }

🛠️ 开发指南

扩展词法分析器

# 添加新关键字classLexer:KEYWORDS={# 现有关键字'整数','小数','文本',# 新增关键字'数组','哈希表',# ← 在这里添加}

扩展语法分析器

classParser:defparse_array_declaration(self):"""解析数组声明"""# 实现:整数数组 列表[10]pass

扩展代码生成器

classCCodeGenerator:TYPE_MAP={'整数':'int','数组':'int*',# ← 新增类型映射}

🔬 技术细节

AST节点设计

@dataclassclassFunctionDeclaration(ASTNode):"""函数声明节点"""name:str# 函数名params:List[Dict[str,str]]# 参数列表return_type:str# 返回类型body:List[ASTNode]# 函数体

优势:

  • 使用Python的dataclass,代码简洁
  • 类型提示清晰
  • 易于序列化和调试

错误处理

try:result=compiler.compile(source_code,source_path)exceptSyntaxErrorase:print(f'❌ 语法错误:{e}')exceptExceptionase:print(f'❌ 编译失败:{e}')

🎯 下一步开发

短期目标(1-2周)

  • ✅ 数组支持:整数数组 列表[10]
  • ✅ 字符串操作:文本.长度(),文本.截取()
  • ✅ 结构体支持:结构 用户 { }
  • ✅ 更好的错误提示(显示出错代码行)

中期目标(1-2个月)

  • 🟡 LLVM后端(替代C转译)
  • 🟡 标准库(常用函数)
  • 🟡 包管理器(类似pip)
  • 🟡 调试器支持

长期目标(3-6个月)

  • 🔴 IDE插件(VS Code)
  • 🔴 在线编译器(Web版)
  • 🔴 性能优化
  • 🔴 与Python/C互操作

🐛 常见问题

Q1: 为什么选择转译到C而不是直接生成机器码?

A:分阶段实现:

  1. 阶段1(当前):CNSH → C → 机器码

    • 快速验证语言设计
    • 利用GCC的优化能力
    • 跨平台兼容性好
  2. 阶段2(未来):CNSH → LLVM IR → 机器码

    • 更好的优化
    • 更快的编译速度
    • 更多平台支持

Q2: 中文变量名在C代码中能用吗?

A:可以!

  • C99标准支持UTF-8标识符
  • GCC 4.8+、Clang 3.0+、MSVC 2015+ 都支持
  • 生成的C代码保留中文变量名

Q3: 如何添加新的语法特性?

A:三步走:

  1. 在Lexer中添加新关键字
  2. 在Parser中添加解析方法
  3. 在CCodeGenerator中添加代码生成

📖 学习资源

编译原理推荐:

  • 《编译原理》(龙书)
  • 《现代编译原理》(虎书)
  • 《编程语言实现模式》

Python编译器实战:

  • Let’s Build A Simple Interpreter
  • Crafting Interpreters

🙏 致谢

感谢:

  • 🫡Lucky·UID9622:CNSH语言创始人
  • 🤖Claude (Anthropic):AI协作者
  • 🇨🇳所有支持中文编程的人

献给:

  • 所有不懂英文但想学编程的中国老百姓
  • 所有相信"代码跟中国姓"的技术人
  • 所有为技术平权奋斗的人

📜 开源协议

MIT License + 龙魂君子协议

允许:✅ 个人学习 ✅ 学术研究 ✅ 二次开发(保留署名) ✅ 商业合作(需授权)禁止:❌ 删除DNA追溯码 ❌ 移除GPG签名 ❌ 改变创作者署名 ❌ 欺骗性使用违反后果:🔴 72小时通牒 🔴 多平台曝光 🔴 法律诉讼

DNA追溯码:#龙芯⚡️2026-02-02-CNSH-Python编译器-v1.0
GPG指纹:A2D0092CEE2E5BA87035600924C3704A8CC26D5F
确认码:#CONFIRM🌌9622-ONLY-ONCE🧬PY-CNSH-001

老兵,Python版CNSH编译器完成!🫡🐍🔥

让全世界看到:中国人用Python写编译器,也能做得很牛逼!🇨🇳💪

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 17:50:20

【收藏】上下文工程:决定AI应用质量的75%关键因素,提示词仅占10%

上下文工程决定AI应用质量的75%&#xff0c;远超模型选择(15%)和提示词设计(10%)。它包含六大核心组件&#xff1a;提示词技术、查询增强、长期/短期记忆管理、知识库检索和工具智能体。真正的"魔法"在于整个信息流水线&#xff1a;上下文来源、检索筛选格式化、工具…

作者头像 李华
网站建设 2026/5/25 5:15:25

2026年软件测试公众号热度全景:专业洞察与行动指南

软件测试公众号在2026年已成为从业者获取行业动态的核心渠道&#xff0c;热度内容集中于解决实际痛点&#xff08;如效率瓶颈、安全风险&#xff09;&#xff0c;并以专业深度驱动流量增长。本文基于最新数据&#xff0c;解析三大爆款内容类型&#xff0c;并以“手动验证”为案…

作者头像 李华
网站建设 2026/5/20 21:04:14

好写作AI:论文政策建议不再“假大空”,AI教你写出一针见血的方案!

当你的政策建议部分写得像政府工作报告摘抄&#xff0c;连自己看了都想点“下一页跳过”时——是时候请AI这位“策略军师”出山了。 张明对着论文最后一章“政策建议”发了半小时呆&#xff0c;写出来的句子仿佛是从十年前教科书里穿越来的&#xff1a;“应加强监管…需完善体系…

作者头像 李华
网站建设 2026/5/23 21:56:32

SGMICRO圣邦微 SGM2205-3.3XKC3G/TR SOT-223-3 线性稳压器(LDO)

特性宽工作输入电压范围&#xff1a;2.5V至20V固定输出电压&#xff1a;1.8V、2.5V、3.0V、3.3V、3.6V、4.2V、5.0V和12V可调输出电压范围&#xff1a;1.8V至15V输出电压精度&#xff1a;25C时为1%低压差&#xff1a;800mA时典型值为450mV电流限制和热保护出色的负载和线性瞬态…

作者头像 李华
网站建设 2026/5/26 11:22:57

Infineon英飞凌 IR2085STRPBF SOIC-8 栅极驱动芯片

特性简单的初级侧控制解决方案&#xff0c;可用于48V分布式系统的半桥直流母线转换器&#xff0c;减少元件数量和电路板空间集成50%占空比振荡器和半桥驱动IC于单个SO - 8封装中可编程开关频率&#xff0c;每通道最高可达500kHz具备/- 1A驱动电流能力&#xff0c;针对低电荷MOS…

作者头像 李华
网站建设 2026/5/26 4:53:58

我用的是 Arch BTW”到底算不算吹牛?

在 Linux 圈子里,有一句话几乎已经成了文化符号: “I use Arch BTW.” 它既是炫耀,也是自嘲; 既是身份认同,也是社区玩梗。 但问题来了—— 如果你用的是 EndeavourOS、CachyOS、Manjaro,甚至是装了 Archinstall 的 Arch,那你到底“配不配”说这句话? 这看似是个玩…

作者头像 李华