自制编程语言CXScript(一) 总括
来源:互联网 发布:中山大学网络服务中心 编辑:程序博客网 时间:2024/06/06 08:29
在山(chen)重(mi)水(zhao)复(huan)疑(shi)无(xia)路(gu)即将断稿的时候,脑子一抽,想到可以分享点干货。
哦,放错图了。
嗯,今天的干货内容就分享——如何实现一款自定义的编程语言,顺便还能复习一下好多之前的内容。
这里不是要开发一款颠覆世界、改变思维的编程语言,而是为了做一款比较“小学生”的编程语言。
比如我希望能这么描述计算菜价:
令 菜价 = 10
令买菜数量 = 20
令总价 =菜价*买菜数量
输出总价
还有判断语句可以去掉括号,做一些简单的判断运算:
如果总价 > 100
输出 “不买了……太贵了”
其他情况下
输出 “买了”+总价+“元”。
结束判断
嗯……基本上就这两个功能。
可能你会说:循环怎么办?
好吧,就再加个目标:
重复 i < 10
令 i=i+1
输出 “目前是第” + i + “次”
结束重复
如果你接触过vb的话,总体上就跟VB有点像。
如果你没接触过任何编程语言……却发现你看得懂上面的程序,那恭喜你,你非常有学习编程语言的天赋。
其实……编程嘛,不就是为了把生活里做的事给一步步描述出来么?
所以,简化编程语言一直是编程界的趋势。比如从C语言到C#,就弱化了许多概念;从Java到Kotlin成为安卓的官方开发语言……你会发现它们的描述方式、编码风格越来越接近人类思维,也越来越容易。
咱们没法造一款上天入地轰烈一时的编程语言,就写一款简单得不能再简单(无法支持复杂语句)的吧。
好了,自此以下,就是程序猿才看得懂的内容了。
以下无指定情况下,以C#作为开发语言。
首先就是要实现简单的赋值语句:
令 a = 1
令 b = a + 2
令 a = 0
这里不要带入Swift的编程想法,这里的令(或者let)不是为了描述常量,而是为了接近语义:用于操作变量。
为了引入“变量”这个概念,需要用字典来存变量名和对应的值。为了简单起见,我们只实现整数的字典(也就是说,这个程序从始至终只有……int变量):
Dictionary<string,int> g_variables;
出现赋值语句的时候,只需要取出对应的符号,然后判断符号是数字,还是变量(规定以字母开头),然后取值即可。当右边的式子计算完毕之后,再把值放到左边对应的位置上。
比如:
令 b = a+1
将会经历如下的过程:
这个过程为了字典总能取到值,默认没操作的变量都为0,比如你现在去要c,字典应该放一个c,并且告诉你c=0。
这个计算中最需要注意的可能就是:四则运算的实现了。
比如遇到 令a = 1+ 2 * 3
是不能像上图一样逐一计算的,所以需要用到两个栈来读入符号和值,在栈内符号优先级较高的情况下,取出符号进行计算。具体的可以参看网上的四则运算计算。
我在实现的时候是没考虑支持括号的,所以每次遇到新符号优先级低的时候,只取出一次计算,这样栈内的符号在最后是可以从右往左计算的。
比如
a = 1+2*3*4+5
在基于上面的规则下,会分别先计算2*3=6,6*4=24,然后由于栈的特性,将最后从右往左算出5+24+1。
在四则运算能正确计算之后,同理也可以用来判断如果里面的条件。
比如刚刚写出了:
如果 a > 20*10
显然左右式都可以进行一次计算,获得对应的值,然后进行比较。
看,一下子你就实现了两个语句……
不过细节还是有很多考究的点的。下次再根据实际的代码谈谈吧。
总而言之,目前我们就支持三种语句:顺序、循环、分支。而我们即将开始的,却是……变量操作。但是变量操作一旦能顺利完成,对于分支或者循环而言,将是事半功倍的。
- 自制编程语言CXScript(一) 总括
- 自制编程语言CXScript(二) 实现赋值语句和四则运算
- 自制编程语言CXScript(三) 如何实现if语句、else语句并实现分支跳转
- VB程序设计总括(一)
- 【自制编程语言】准备工作
- Hadoop源代码分析(一)总括
- 《自制编程语言》学习笔记
- 不求甚解之自制编程语言
- 自制编译器,链接器(一)语言定义
- IT人员必学最基础知识(一)——总括
- 自制编程语言有什么好处?
- 自制编程语言——引子
- 一、Redis 基础命令---总括
- OpenMAX介绍(总括)
- OpenMAX介绍(总括)
- OpenMAX介绍(总括)
- 自制图片搜索引擎(一)
- 自制操作系统学习心得(一)
- 在centos7系统下配置LAMP详解教程
- python绘图:matplotlib和pandas的应用
- HDU1176 DP
- 线程和进程的区别(来自知乎)
- 拓扑排序入门确定比赛名次
- 自制编程语言CXScript(一) 总括
- HashMap的工作原理
- XYNUOJ 两个整数之和
- 查看Tomcat版本
- 最长单词-LintCode
- JavaScript基本知识
- android 自定义适配器MyAdapter
- CC2541 BLE源码阅读知识积累之外设从机Peripheral工作模式
- vimrc配置