• 汉语编程的核心问题和我的非形式语言解决方案


     实现汉语编程是许多中国人的梦想,但是他们没有意识到,汉语编程的首要问题和汉语英语无关,而和编译器的处理能力有关。

    问题一 符号问题

    了解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的标注同样也可以实现。

     

  • 相关阅读:
    数据库相关(转)
    sql之left join、right join、inner join的区别
    PHP面试编程
    实验6 shell程序设计一(1)
    实验7 shell程序设计二(1)
    Linux软件安装管理
    Linux常用命令总结
    合唱团
    linux课后作业1
    linux网络服务实验
  • 原文地址:https://www.cnblogs.com/tkt2016/p/12710471.html
Copyright © 2020-2023  润新知