相信每个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 == 10] jcSQL: update student set name = 'xxx' where age = 10 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',10) 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的文章,都是编写过程中一些个人觉得值得记录的地方吧,并不会写设计教程,第一是太长容易坚持不下去,第二就是有前辈高人在先,其教程已超越其他人太多。