“诗三百” 基于JVM的编程语言 向华为的“仓颉”语言致敬

诗三百者,一门运行于JVM虚拟机之上,蕴含中国传统文化基因,顺应中文写作习惯,优美雅致、韵味悠长的编程语言。


大家好, 极客架构师,极客架构师——专注架构师成长,我是码农老吴。

本节是《架构师基本功之设计模式》第13期-第1节

在第12期,我给大家分享了行为型设计模式中的责任链模式(Chain of Responsibility pattern),基于责任链模式,重构了电商营销活动中,常见的会员资格校验功能。

如下所示,在上期的后续规划中,我给大家许下了豪言壮语……

具体到下一期,我计划给大家分享的是,有点偏门的,有点难度的解释器模式,为了讲解这个设计模式,我想玩个大的,专门设计一个自己的“编程语言”,来配合讲解解释器模式,需要准备的时间可能稍微长一些,大家敬请期待(万一搞不出来,码农老吴丢人就丢出银河系啦)。

结果给自己挖了个坑,一个深不见底的坑。

从国庆前夕,直至10月8 ,整整10天时间。我切断所有通讯,关闭所有神识,收回所有位面的分身,进入我的空间法宝“心流塔”中,闭关研发新的编程语言。

“心流塔”被我停泊在银河系边缘的柯伊伯带陨石群中,一旦新的编程语言研发失败,我就驾驶“心流塔”,逃离银河系,向距离银河系最近的,大约200万光年之外的仙女星系进发,找我的仙女去。

国庆期间,由于受太阳风的影响,我的“心流塔”与地球的通讯信 受到影响,没发一篇文章,没录一个视频,没回复一个留言,请大家见谅。

万幸啊,万幸啊,多亏夫子他老人家保佑,终于在10月8 下午,我的第一个开发语言,呱呱落地了。我给她取名为——诗三百。

夫子曰:

诗三百,一言以蔽之,思无邪。

名字的由来

《诗经》,是我国古代诗歌的源头,传闻是夫子他老人家,汇集了西周至春秋时期的311篇诗歌而成,在先秦时期,称为《诗》,或取其整数称《诗三百》

其中,对于中国人耳熟能详的“关关雎鸠,在河之洲,窈窕淑女,君子好逑”,即取自《诗经》的第一首诗歌——《周南·关雎》。

关关雎鸠,在河之洲。窈窕淑女,君子好逑。

参差荇菜,左右流之。窈窕淑女,寤寐求之。

求之不得,寤寐思服。悠哉悠哉,辗转反侧。

参差荇菜,左右采之。窈窕淑女,琴瑟友之。

参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。

《诗经》中的诗歌,典故,词语,被后世无数的诗人,词人,文学家,理学家所引用。

取名《诗三百》,寓意天下所有的程序员,编写的代码,都能被当世和后世,无数的程序员引用,能服务于更为广大的人民群众。

处女秀

学习一门新的编程语言,按照行规,一般是编写一个“Hello World”即可。但是,对于“诗三百”语言的处女秀,这样做就有些太Low啦,不能体现出她的优美雅致,韵味十足。

君子,当:

不鸣则已,一鸣惊人;

一出手就要惊艳群芳;

就要有诗仙李太白“笔落惊风雨,诗成泣鬼神”的气势;

就要充满诗情画意,

就要满满的中国风,

就要表现出中国人的文化自信。

不吹啦,不吹啦,再吹夫子他老人家都看不下去啦,君子当讷于言敏于行,上源代码吧。

源代码

这是源代码呢,一个英文单词都没有,运算符也是中文的,连Java编程中,常见的“{}”都没有。看起来是不是更像一首诗,一篇优美的散文,上面的话可不是吹得哦。

这段代码,是一段给李白和杜甫两位诗人投票的代码,里面包含了变量定义语句,赋值语句,循环语句,条件语句,输入输出函数等等,一个编程语言中,应该具备的基础功能。

大家自己分析分析,应该可以理解的八九不离十,我在后面的视频中,也会详细讲解。

另外,

城边有古树,日夕连秋声。来自李白赠杜甫的一首诗

《沙丘城下寄杜甫》

我来竟何事,高卧沙丘城。

城边有古树,日夕连秋声。

鲁酒不可醉,齐歌空复情。

思君若汶水,浩荡寄南征。

笔落惊风雨,诗成泣鬼神。取自杜甫赞美李白的一首诗

《寄李十二白二十韵》

昔年有狂客, 尔谪仙人。

笔落惊风雨,诗成泣鬼神。

声名从此大,汩没一朝伸。

文彩承殊渥,流传必绝伦。

龙舟移棹晚,兽锦夺袍新。

白日来深殿,青云满后尘。

乞归优诏许,遇我宿心亲。

未负幽栖志,兼全宠辱身。

剧谈怜野逸,嗜酒见天真。

醉舞梁园夜,行歌泗水春。

才高心不展,道屈善无邻。

处士祢衡俊,诸生原宪贫。

稻粱求未足,薏苡谤何频。

五岭炎蒸地,三危放逐臣。

几年遭鵩鸟,独泣向麒麟。

苏武先还汉,黄公岂事秦。

楚筵辞醴日,梁狱上书辰。

已用当时法,谁将此义陈。

老吟秋月下,病起暮江滨。

莫怪恩波隔,乘槎与问津。

抽象语法树(AST,Abstract Syntax Tree)片段

编译器的基本流程:

词法分析阶段:源代码 ->Token

语法分析阶段: Token -> 抽象语法树

解释执行阶段:基于解释器设计模式,解释执行抽象语法树

测试类

package com.geekarchitect.ssb.parser;import junit.framework.TestCase;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.StringReader;public class SSBParserTest extends TestCase {    private static final Logger LOG = LoggerFactory.getLogger(SSBParserTest.class);    SSBParser ssbParser;    public void setUp() throws Exception {        super.setUp();    }    public void tearDown() throws Exception {    }    public void testVirginShow(){        String fileContent="文字之 诗人;n" +                "整数之 李白得票数;整数之 杜甫得票数;整数之 投票数;n" +                "阴阳之 是否继续;n" +                "是否继续 等于 阳;n" +                "轮回 ( 是否继续 ) 晚照n" +                "    书写 : "李白、杜甫,你独爱谁?"";阅读 : 诗人;n"" +                ""    书写 : ""愿为他投票几何?"";阅读 : 投票数;n"" +                ""n"" +                ""    倘若 (诗人 等乎 ""李白"") 云 n"" +                ""        书写 : ""城边有古树,日夕连秋声。"";n"" +                ""        李白得票数 等于 李白得票数 加 投票数;n"" +                ""        书写 : ""李白得票数:""; n"" +                ""        书写 : 李白得票数;n"" +                ""    雨  n"" +                ""    否则 云 n"" +                ""        书写 : ""笔落惊风雨,诗成泣鬼神。"";n"" +                ""        杜甫得票数 等于 杜甫得票数 加 投票数;n"" +                ""        书写 : ""杜甫得票数:"";n"" +                ""        书写 : 杜甫得票数;n"" +                ""    雨n"" +                ""    书写 : ""是否继续"";阅读 : 是否继续;n"" +                ""晴空n"" +                ""书写 : ""投票结束"";"";        LOG.info(""源代码:n{}""

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月6日
下一篇 2022年9月6日

相关推荐