汉语编程的核心问题和我的非形式语言解决方案
实现汉语编程是许多中国人的梦想,但是他们没有意识到,汉语编程的首要问题和汉语英语无关,而和编译器的处理能力有关。
问题一 符号问题
了解C#的朋友都只知道最简单的输出"Hello World"程序语句是这样写的:
Console.WriteLine("Hello World"); 程序1
如果把这个语句的点号括号去掉,就变成了这样
Console WriteLine "Hello World"; 程序2
我的问题是:怎么让编译器把这条符号很少的程序语句编译出正确的结果?
为什么会提出这个问题:
因为我们日常使用的语言都是没有这些符号的;
用类似BNF简单表示上面的标准C#语句是
expression ->
identifier +“.”+ identifier +" ( "+ literal +")"
因为程序2没有非终结符点号和括号,所以上面的BNF表达式是不适用的,也不能根据这个BNF表达式编写编译程序
要正确处理变形后的程序2,已经超出了形式语言的范围,用通用的BNF已经不能正确表示了。
我的解决方案:
1 确定每个词的属性,建立描述
可以分析出表达式、
类名称identifier + 函数名称identifier + literal
2 匹配描述
类名称identifier + 函数名称identifier 可以确定这是一条调用函数的语句,再分析Console 类中是否有函数和 程序2中的函数名称identifier+ literal 匹配,如果有,表明这个语句是正确的
3 翻译到通用的函数调用
进一步翻译成 类名称identifier . 函数名称identifier( literal ),最后生成。
问题二 语序问题
假设要求写一个函数,实现一个物体从一个点跑到另一个点的功能。
一般语言是这么声明这个函数的
void move(Point fromPoint,Point toPoint)
翻译成白话就是
移动(开始点,结束点)
但是日常语言的语序不是这样的,而是
从(开始点)跑到(目的点)
按照自然语言的语序应该这么声明这个函数:
void from(Point fromPoint) move to(Point toPoint)
我的问题是:怎么让编译器把这条语序不一般的程序语句编译出正确的结果?
为什么会提出这个问题:
因为日常语言的语序就是这样的。
当前所有的编程语言定义函数都是来源于数学函数形式,形式都是
函数名称+参数列表
在CPU汇编级别也是如此。
一般的编程语言是无法解决语序随意放置的问题。
我的解决方案:
1.按主流编程语言定义函数,并实现功能
声明的函数就是void move(Point fromPoint,Point toPoint)
2.在此函数上加文本标注(C#用Attribute,Java用Annotation),
内容是"from(Point fromPoint) move to(Point toPoint)"
3.编译程序前对标注"from(Point fromPoint) move to(Point toPoint)"进行解析,建立它与函数run的一一对应关系。
用C#实现是这样
[新语言程序Attribute("from(Point fromPoint) move to(Point toPoint)")]
void move(Point fromPoint,Point toPoint)
用java的标注同样也可以实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?