诞生于饭桌上的jcSQL语言
相信每个Coder都有心在自己求学阶段可以写一门自己的语言,无论是毕业设计,还是课余爱好;不管是为了提升B格,还是想练手,抑或对其他语言不满,想自己撸一个,只要坚持下去了,都是不错的理由。
现在正值暑假,如果不出去打零工,相信在家开着空调撸一定是非常享受的事情,所以我娴熟地拿了一卷卫生纸,坐在了真皮旋转办公椅上,开始了jcSQL的编写,因为大家都去设计语言,而设计语言是菜鸟们极为膜拜的事情,怀着一颗要成为语言设计者的赤子之心,我开始了手掌与掌中巨物的摩擦,想想都有些小激动呢,不由得想起大二那会儿写的BBS,摩拳擦掌那劲头记忆犹新,至今为止对.net仍抱有好感,虽然写完后从未上线。
其实当初在饭桌上设计这门语言的时候,并不是想设计成通用语言,仅仅是个人觉得SQL语句不好看,所以语言的设计只是基于对SQL语言进行改造,变成自己喜欢的样子,然后设计整个语句的执行引擎,也就是数据库中的一块儿吧,因此管这个东西叫编译器也名不副实,叫解释器应该更加贴切一点,总归是得到快感,叫啥不吃饭。当然了,其实如果初衷是实用,还不如设计成translator,将自己的语法翻译成SQL,不用操心各种其他事情,嗯,这样确实挺好的,但是我就不这样,TM打我啊?!其实是想如果课业不繁重可以写一个完整的数据库。
jcSQL的语法如下,暂时设计成这样,因为对编程语言理论本身的功力不深厚,目前也没有意向去了解这些,看尿性还是有很长路要走,并且有些地方可能没考虑到,不过这毕竟不是通用语言,设计难度小很多,压力也小,所以想法是边写边完善grammar。下面是SQL语句与jcSQL的对比:
SQL: select <- student name age
jcSQL: select name,age from student
SQL: select <- student
jcSQL: select * from student
SQL: update <- student name='xxx' [age == ]
jcSQL: update student set name = 'xxx' where age =
SQL: delete <- student [ name == 'xxx']
jcSQL: delete from student where name = 'xxx'
SQL: create <- student string name int age [ name primary key]
jcSQL: create table student (name string,age int,primary key(name))
SQL: insert into student (name,age) values('xxx',)
jcSQL: insert <- student name='xxx' age=xxx
SQL: drop <- student
jcSQL: drop table student
SQL: alter table student add dept string
jcSQL: alter<- student + string dept
SQL: alter table student drop column dept
jcSQL: alter<- student - string dept
SQL: alter table student alter column dept int
jcSQL: alter<- student / int dept
后面关于jcSQL的文章,都是编写过程中一些个人觉得值得记录的地方吧,并不会写设计教程,第一是太长容易坚持不下去,第二就是有前辈高人在先,其教程已超越其他人太多。
诞生于饭桌上的jcSQL语言的更多相关文章
- 让乔布斯立足肩上的C语言之父
2011年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie). 不过,并非所有人都没能正确认识到里奇所曾作出 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- 《与C语言相恋》
第一章 <与C语言相恋> 目录: 1.1 C语言的诞生 1.2 相恋C语言的理由 1.3 相恋C语言的7个步骤 1.4 目标代码文件,可执行文件和库 1.5 本章小结 C语言的诞生 197 ...
- 探讨后端选型中不同语言及对应的Web框架
在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜 ...
- Python语言的简介
___________________________________________________________我是一条分割线__________________________________ ...
- Python语言 介绍
一.python介绍python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
- 5分钟了解Python语言的简单介绍(转载)
< 转载于Python数据之道 - 本公众号秉承“让数据更有价值”的理念,主要分享数据相关的内容,包括数据分析,挖掘,可视化,机器学习,深度学习等.> ...
- Python语言简介
一.Python语言发展史 1989年吉多·范罗苏姆(Guido van Rossum)中文外号“龟叔”,圣诞节期间开始编写Python语言的编译器. Python这个名字,来自Guido所挚爱的电视 ...
- 你好,Go语言
本文是「vangoleo的Go语言学习笔记」系列文章之一. 官网: http://www.vangoleo.com/go/hello-golang/ 我在2015年第一次接触Go语言,完成了Hello ...
随机推荐
- JUnit报空指针错误,控制台不报任何错误
解决方法:1. 在测试类的beforeClass方法上加try-catch块 2. 添加main方法,里面添加beforeClass();
- easyui跨iframe属性datagrid
1.问题 如何刷新easyui父级tab页中iframe嵌套页中的datagrid? 2.解决方法 (1) parent.$("iframe[title='tabtitle']") ...
- PYthon成长之路第一篇(1)__字符串初识
今天一起走进python的代码世界,一起领悟python的魅力 在很多学习python的书中都会以 print “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,worl ...
- ME525+ 刷机工具及设置中心号码
接上篇: 刷机包下载地址http://sbf.droid-developers.org/umts_jordanplus/list.php,选择一款大陆包.... 设置中心号码: 拨打 *#*#46 ...
- Linux学习之十四、管线命令
Linux学习之十四.管线命令 地址:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_6.php
- wormhole提升hivereader读取速度方案
背景: 最近dw用户反馈wormhole传输速度很慢,有些作业甚至需要3-4个小时才能完成,会影响每天线上报表的及时推送.我看了下,基本都是从Hive到其他数据目的地,也就是使用的是hivereade ...
- 合理的keyword密度散布与黑帽SEO之躲藏文本
合理的keyword密度散布与黑帽SEO之躲藏文本 咱们都晓得.关于baidu的keyword排行有一个非常重要的条件即是keyword密度.在咱们的了解中keyword的密度在2%-8%这个规模之内 ...
- STL的移动算法
要在自己定义类型中使用移动算法.须要在元素中提供移动赋值运算符.移动赋值运算符和std::move()详见<c++高级编程>第9章 class mystring { public: str ...
- LeetCode: Surrounded Regions [130]
[题目] Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is cap ...
- 简单的Ajax
ajax获取时间的html代码 <head> <meta http-equiv="Content-Type" content="text/html; c ...