zoukankan      html  css  js  c++  java
  • 文言语言!!!(附c/c++自译)

    考试 

    中考总分120分。其中古代诗歌默写6分,文言文阅读11分,古诗鉴赏4分。总共21分。
    古代文学占17.5%

    高考总分150分。文言阅读9分,翻译10分,古诗词鉴赏8分,古诗文默写5分。总共32分。
    古代文学占21.3%

    可见文言文是十分重要的。

    然而。。。你想过用文言文编程吗???

    简介

    这是一款由卡内基梅隆大学一名大四学生(作者名叫 Huang Lingdong)打造的文言文编程语言:文言(wenyan-lang)。

    虽然不是最好的语言,但展现了中华民族传统文化的博大精深。

    该语言完全不使用英文字符,只包含繁体中文字符以及繁体的引号「」。

    例如:这是他的Hello Word

    吾有一數。曰三。名之曰「甲」。
    為是「甲」遍。
    	吾有一言。曰「「問天地好在。」」。書之。
    云云

     编译为Javascript

    var n = 3;
    for (var i = 0; i < n; i++) {
        console.log("問天地好在。");
    }

     编译为Python

    a=3
    for _rand1 in range(a):
    	_ans1="問天地好在。"
    	print(_ans1);
    

     编译为Ruby

    a=3
    a.times do |_rand1|
    	_ans1="問天地好在。"
    	p([_ans1].join)
    end 

     自译为c/c++

    int n = 3;
    for (int i=0;i<n;++i) {
        printf("問天地好在。");
    } 

    运行:

    問天地好在。問天地好在。問天地好在。
    

    wenyan目前可编译为JavaScript,Python或Ruby,并且将来会支持更多语言(例如C)。

    本篇文章的c/c++翻译,全为作者个人自译。

    基本语法

    变量

    文言(wenyan) Javascript c/c++
    吾有一數。曰三。名之曰「甲」。 var a = 3; int a = 3;
    有數五十。名之曰「大衍」。 var dayan = 50; int dayan = 50;
    昔之「甲」者。今「大衍」是矣。 a = dayan; a = dayan;
    吾有一言。曰「「噫吁戲」」。名之曰「乙」。 var b = "alas!";

    string b = "alas!";

    吾有一爻。曰陰。名之曰「丙」。 var c = false; bool c = false;
    吾有一列。名之曰「丁」。 var d = []; vector <int> d;
    吾有三數。曰一。曰三。曰五。名之曰「甲」曰「乙」曰「丙」。 var a=1,b=3,c=5; int a=1,b=3,c=5;

    顺序控制

    文言(wenyan) Javascript c/c++
    若三大於二者。乃得「「想當然耳」」也。

    if (3>2)

    { return "of course"; }

    if (3>2)

    {return"ofcourse";}

    若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。 if(3<=5){return "of course"}else{return "no way"} if(3<=5){return "of course"}else{return "no way"}
    為是百遍。⋯⋯ 云云。 for (var i = 0; i < 100; i++){ ... } for (int i = 0; i < 100; i++){ ... }
    恆為是。⋯⋯ 云云。 while (true) { ... } while (true) { ... }
    凡「天地」中之「人」。⋯⋯ 云云。 for (var human of world){ ... } for (int human : world){ ... }
    乃止。 break; break;

    数学

    文言(wenyan) Javascript c/c++
    加一以二。 1+2 1+2
    加一於二。 2+1 2+1
    加一以二。乘其以三。 (1+2)*3 (1+2)*3
    除十以三。所餘幾何。 10%3 10%3
    減七百五十六以四百三十三。名之曰「甲」。 var a = 756-433; int a = 756-433;
    夫「甲」「乙」中有陽乎。 a || b a || b
    夫「甲」「乙」中無陰乎。 a && b a && b

    Objects

    文言(wenyan) Javascript c/c++
    吾有一物。名之曰「甲」。 var a = {}; struct node {} a;
    吾有一物。名之曰「甲」。其物如是。物之「「乙」」者。數曰三。物之「「丙」」者。言曰「「丁」」。是謂「甲」之物也。 var a = {b:3, c:"d"}

    struct node  {int b=3;char c="d";}a;

    函数

    文言(wenyan) Javascript c/c++
    吾有一術。名之曰「吸星大法」。是術曰。⋯⋯是謂「吸星大法」之術也。 function f(){...} void xixingdafa () {...}
    吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。 function f(a,b,c,d,e,f){...} void liupaishengjian (int a,int b,int c,int d,int e,int f) {...}
    吾有一術。名之曰「翻倍」。欲行是術。必先得一數。曰「甲」。乃行是術曰。乘「甲」以二。名之曰「乙」。乃得「乙」。是謂「翻倍」之術也。 function double(a){var b = a * 2; return b;} viod Double(int a){int b = a * 2; return b;}
    施「翻倍」於「大衍」。 double(dayan); Double(dayan);
    吾有一術。名之曰「甲」。欲行是術。必先得一數曰「乙」。二言。曰「丙」。曰「丁」 function a(float b, string c, string d) void a(int b, string c, string d);
    夫「甲」。夫「乙」。夫「丙」。取二以施「丁」。取二以施「戊」。名之曰「己」。 var f = e(a,d(b,c)) int f = e(a,d(b,c))
    夫「甲」。夫「乙」。夫「丙」。取二以施「丁」。取二以施「戊」。取一以施「己」。夫「庚」。夫「辛」。取三以施「壬」。名之曰「癸」。 var j = i(f(e(a,d(b,c))),g,h) int j = i(f(e(a,d(b,c))),g,h)
    乃得四十九 return 49; return 49;
    減五十以一。乃得矣 return 50-1; return 50-1;
    乃歸空無 return; return;

    注释

    文言(wenyan) Javascript c/c++
    批曰。「「文氣淋灕。字句切實」」。 /*文氣淋灕。字句切實*/ /*文氣淋灕。字句切實*/
    注曰。「「文言備矣」」。 /*文言備矣*/ /*文言備矣*/
    疏曰。「「居第一之位故稱初。以其陽爻故稱九」」。 /*居第一之位故稱初。以其陽爻故稱九*/ /*居第一之位故稱初。以其陽爻故稱九*/

    代码欣赏

    我自己的评价

    网上的一些评价也是参差不齐,我认为作者(Huang Lingdong),做这个项目其实只是一个期末作业亦或业余爱好。把这个当一件有趣的事罢了。并不希望成为主流或十分强大的语言。

    我认为,作者既然没说这是一个多么认真、能用于生产环境的正式项目。而从这玩笑中寻找意义和用途,才是没意义的是。

    因为文言语言可以解释成各种语言。他可做的是还是较多的。(其中洛谷题库支持文言语言是一个很好的例子。)

    这是A+B problem 的文言:

    施「require('fs').readFileSync」於「「/dev/stdin」」。名之曰「數據」。
    施「(buf => buf.toString().trim())」於「數據」。昔之「數據」者。今其是矣。
    施「(s => s.split(' '))」於「數據」。昔之「數據」者。今其是矣。
    注曰。「「文言尚菜,無對象之操作,故需 JavaScript 之语法」」。
    
    夫「數據」之一。取一以施「parseInt」。名之曰「甲」。
    夫「數據」之二。取一以施「parseInt」。名之曰「乙」。
    
    加「甲」以「乙」。書之。
    

    抱歉,我自己看文言代码是看不了的。我也不希望上面的一些有识之士把文言语言作为NOI信息竞赛或计算机专业的必学语言。(除非想复辟繁体字)

    Esolang

    Esoteric programming language,简称 Esolang,它们的设计被用于测试计算机语言设计的极限,作为一个概念的证明,或仅仅是一个玩笑。Esolang 创作者通常并不打算让它成为主流编程语言,他们几乎不会在意语言的可用性,甚至恰恰相反,会故意增加使用难度。(我介绍这个你们自己品)

    比如 Brainfuck,它是在 1993 年被创造的编程语言,语法仅包含八种符号,没有任何单词,用它打印 Hello world 是这样的:

    ++++++++++[>+++++++>++++++++++>+++>+<<<<-]
    >++.>+.+++++++..+++.>++.<<+++++++++++++++.
    >.+++.------.--------.>+.>.
    

    再比如 MarioLANG,它同样只能使用符号,需要使用形似马里奥关卡的语法来书写:

    ++++:     >    > +:+:+:+:+:+:+:::::
    ====+    >^=== """=================
        +:-):(:^= =                   !
        =========  =                  #
                    = !         .+.,:-<
                     =###       ======"
    

    Parenthesis Hell,言如其名,括号地狱,只能使用括号来书写:

    (()()(()()(()()()()((()()(()(()((()((()()()((()((()()()((()((((()()(()(
    )()()()()(((()(((()((()((((()(((()()(()()((()((()()()((()()(()()()()(()
    ()()()(()()()()(()(())))))))))))))))))))))))))))))))))))))))))))))))))
    

    传送门

    -----------------------------END--------------------------------

  • 相关阅读:
    C#——面向对象,常用类
    C#——基础
    C#——winform
    Oracle——PL/SQL,存储过程/函数,java连接Oracle操作存储过程/函数,触发器
    Oracle——数据处理(增删改查),创建表与管理表,视图,索引,同义词
    Oracle——集合运算
    PoisonTap
    在Ubuntu上安装LAMP(Apache、Mysql、Php)
    "Unable to locate package lrzsz"的解决办法
    OtterCTF
  • 原文地址:https://www.cnblogs.com/Srand-X/p/12832851.html
Copyright © 2011-2022 走看看