小刘是一名出色的软件工程师,能流畅的使用5种编程语言打印 hello world。一天他的准岳父(养老院院长)找到他,拜托他一件事:教养老院的老人们编程,不用太难,体验一把思想就行了
院长,别说了,拔刀吧
小刘内心是拒绝的,一些不可抗拒的原因,让他强忍住内心的翻滚,“嗯,没啥问题”。小刘神志有些恍惚,准备离开院长办公室。院长补充道:“对了小刘,老人们都不会英语,但ABCD还是认识的,这个你知道的吧,知道的吧 吧 吧 ...”
三天狂风暴雨般的发泄后,憔悴的小刘坐在台阶上吸着烟,开始想怎么去做这个事。有两种方案:
1:选一门现成的编程语言,但大部分都是老外写的,语言关键字和规则繁多,老人们吃不消
2:自己设计一门中文的编程语言,实现简单的输入输出,告诉老人什么是编程就行了
小刘选择自己设计一门编程语言,提笔一挥,寥寥的在小字本上涂涂画画。
定义 A,B,C;
B 等于 3;
输入 A ;
C 等于 A乘B;
输出 C;
当然,上面的例子,这只是小刘写在小字本上的草稿,具体语言规则怎么定义?怎么解析这个语言?怎么执行这个语言?懵逼的小刘开始查阅一些资料。了解市面上的语言是如何实现的。
小刘的故事先说到这儿。我们开始严肃一点...
『设计模式』中有一个模式可以解释特定的语法规则,它就是解释器模式(Interpreter Pattern),不同于的工厂模式或者策略模式,解释器模式在java或者.net中并不常见,业务中很少用去解释特定的语法,所以并不被广泛的使用。一个解释器可大可小,大可为复杂的编译器,小可以是一个简单的字符串解析。但本质都是对特定语法做出合理解释。
假设输入一个公式字符串: 1+2*3 注意这是一个字符串,要解析这个公式字符串,得到最终的值我们有两种方案:
循环遍历字符串,将括号,运算符,数字提取出来,然后根据运算符左右结合以及优先级来计算
将表达式转换为树结构的对象,树结构的每个节