• 诞生于饭桌上的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 == 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的文章,都是编写过程中一些个人觉得值得记录的地方吧,并不会写设计教程,第一是太长容易坚持不下去,第二就是有前辈高人在先,其教程已超越其他人太多。

  • 相关阅读:
    为什么不能获取PHP表单变量的?
    DOM4j读写XML(实例)
    MyEclipse环境的使用中的一些常识
    Springcloud学习笔记38springboot整合日志框架log4j2
    Springcloud学习笔记37任务调度框架Quartz 使用(Cron表达式)与@scheduled注解定时任务
    Linux学习笔记05linux 常用操作命令02(touch命令、cp命令、rm命令、mv命令)
    Linux学习笔记07Vim文本编辑器
    Java基础知识13Java反射原理以及基本使用和重写与重载的区别
    Linux学习笔记07常用操作命令(tar命令)
    Java基础知识14commonsio第3方开源库的具体使用(IOUtils类、FileUtils类、FilenameUtils类)
  • 原文地址:https://www.cnblogs.com/imjch/p/3902985.html
Copyright © 2020-2023  润新知