诞生于饭桌上的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 ...
随机推荐
- C#5 复习总结循环 迭代和穷举
一.章节复习: 循环.反复执行某段语句一种语法形式. 1.基本语法: for( 初始条件 ; 循环条件 ; 状态的改变 ) { 循环体 } 循环的四要素. 循环的执行过程.初始条件--循环条件--循环 ...
- Photoshop CS6 基础知识
Photoshop CS6 基础知识 新建 练习 宽度72, 像素厘米 ...
- Python基础之 正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- EC读书笔记系列之18:条款47、48
条款47 请使用traits classes表现类型信息 记住: ★Traits classes使得“类型相关信息”在编译期可用.它们以templates和“templates特化”完成实现 ★整合重 ...
- linux自旋锁
一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机 ...
- 二.ubuntu14.04 3D特效设置
一.如果按照第一篇都设置好了(显卡驱动等都已经正常),然后 1.安装CCSM设置管理器 用鼠标点击屏幕左侧Unity程序启动栏中的“Ubuntu软件中心”(有“A”字形的公文包图标), 在弹出的“Ub ...
- phpcms 任意位置获取用户头像
主要拿到userid $_username = param::get_cookie('_username');//当前登录人用户名 $_userid = param::get_cookie('_use ...
- 6 支持向量机SVM
注:理论部分参考:http://blog.csdn.net/v_july_v/article/details/7624837 (1)SVM是现成最好的分类器,这里“现成”指的是分类器不加修改即可直接使 ...
- 解决Eclipse下第三方库无法导航源代码
写在前面(的废话):Eclipse无法导航代码,存在的可能性非常多,这里我们只讨论在引用第三方库时无法导航的情况,是一个很简单的Case,但是搜索能力好像不太及格,没找到一针见血的方案,于是自己研究了 ...
- 05-0. 求序列前N项和(15)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和.注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子. 输入格式: 输入在一行中给出一个正整数 ...