相信每个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语言的更多相关文章

  1. 让乔布斯立足肩上的C语言之父

    2011年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie). 不过,并非所有人都没能正确认识到里奇所曾作出 ...

  2. 深入浅出数据结构C语言版(5)——链表的操作

    上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...

  3. 《与C语言相恋》

    第一章 <与C语言相恋> 目录: 1.1 C语言的诞生 1.2 相恋C语言的理由 1.3 相恋C语言的7个步骤 1.4 目标代码文件,可执行文件和库 1.5 本章小结 C语言的诞生 197 ...

  4. 探讨后端选型中不同语言及对应的Web框架

    在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜 ...

  5. Python语言的简介

    ___________________________________________________________我是一条分割线__________________________________ ...

  6. Python语言 介绍

    一.python介绍python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...

  7. 5分钟了解Python语言的简单介绍(转载)

    < 转载于Python数据之道 - 本公众号秉承“让数据更有价值”的理念,主要分享数据相关的内容,包括数据分析,挖掘,可视化,机器学习,深度学习等.>                    ...

  8. Python语言简介

    一.Python语言发展史 1989年吉多·范罗苏姆(Guido van Rossum)中文外号“龟叔”,圣诞节期间开始编写Python语言的编译器. Python这个名字,来自Guido所挚爱的电视 ...

  9. 你好,Go语言

    本文是「vangoleo的Go语言学习笔记」系列文章之一. 官网: http://www.vangoleo.com/go/hello-golang/ 我在2015年第一次接触Go语言,完成了Hello ...

随机推荐

  1. 在ASP.NET MVC自定义错误页面

    异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...

  2. MySql的like语句中的通配符:百分号、下划线和escape 的使用

    MySql的like语句中的通配符:百分号.下划线和escape %代表任意多个字符 select * from user where username like '%huxiao'; select ...

  3. 关于fsockopen pfsockopen函数被禁用的解决方法

    服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client().注意:stream_socket_client()和fsockopen() ...

  4. setTimeout的若干坑

    第一坑:作用域 首先,有一个关于this的面试题,是这样的: var fullname = 'John Doe'; var obj = { fullname: 'Colin Ihrig', prop: ...

  5. ,gitignore 中规则不起作用的原因

    .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件). 这样则好理解, ...

  6. windows程序设计读书笔记3——字符显示2

    由于显示的字符可能会不全,我们很容易想到的一个解决办法是使用滚动条. 先看一下代码,再进行分析: /*------------------------------------------------- ...

  7. 在非MVC环境下使用 Razor引擎

    Razor引擎下载地址: http://github.com/Antaris/RazorEngine 解析Model: string template = "Hello @Model.Nam ...

  8. Jquery remove()和empty()

    要用到移除指定元素的时候,发现empty()与remove([expr])都可以用来实现.可仔细观察效果的话就可以发现.empty()是只移除了 指定元素中的所有子节点,拿$("p" ...

  9. 【Python】iiblogs ——命令行下的网页收藏夹

    昨天和集训队的几位大大聊天,聊着聊着就聊到了博客的问题,发现几个人要么在CSDN 要么在博客园上, 要记住他们的所有的地址还真是不便,于是灵机一动,何不自己写一款小工具来存储打开他们的博客呢?于是将这 ...

  10. 如何交换a和b两个整数的值,不用额外空间

    这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存: t = b; b = a; a  = t; 粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只 ...