`
Salin
  • 浏览: 21651 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

抛砖引玉。构建编译器,设计自己的语言之语法设计

阅读更多
前几天发了一个帖子,简单地描述了一下设计一种新的语言(说语言太大了,说脚本又不太严谨)并编译运行的流程
http://www.iteye.com/topic/403608

不过貌似感兴趣的人不多,可能是我表达的不是很清楚

这种方式的好处显而易见,可以让你设计的语言更贴近某一个业务领域。
缺点也显而易见,复杂度过高。

言归正传,现在已经决定用这种方式设计一种ETL领域的专用语言。
首先需要的是设计语法,先考虑数据的拷贝这样一个流程。

之前做Demo的时候,没多想,就这么写出来了
$source:url="jdbc:hsqldb:mem:Test",table="DB1"
$target:url="jdbc:hsqldb:mem:Test",table="DB2"

#copy
   if($source.Name in "LiLei","HanMeiMei"){
      $target.Name=$source.Name  
      $target.Address=$source.Address 
   }
#end


这段代码乍一看,没什么问题。但是现在要认真做了,于是仔细分析了一下这几行代码的语义。
实际上,把上面的代码翻译成自然语言,就是:
声明数据源source和target,做一个数据拷贝操作,条件是source中有某些数据的Name字段值为"LiLei"或者"HanMeiMei",字段映射关系为target.Name=source.Name ,target.Address=source.Address

这里就出现问题了。上文中,对于“数据拷贝”这个操作的描述是包含在#copy,#end中的,if表达式的含义是进行copy操作的条件,即如果某条记录满足这个条件,则拷贝这条记录,同时,字段关系映射和if语句实际上是没有关系的,所以映射不应该出现在if里面,于是可以变成
#copy
   $target.Name=$source.Name  
   $target.Address=$source.Address 
   if($source.Name in "LiLei","HanMeiMei"){ 
   }
#end

这样看很奇怪,根据上面的分析,if所表达的含义应该是copy的条件,所以if应该在copy外面。不过可以换种写法
#copy
   $target.Name=$source.Name  
   $target.Address=$source.Address 
   condition:$source.Name in "LiLei","HanMeiMei"
#end

哈哈,这样一来顺眼多了。

还有一种语法思路,即直接写
$source:url="jdbc:hsqldb:mem:Test",table="DB1"
$target:url="jdbc:hsqldb:mem:Test",table="DB2"

$target.Name=$source.Name  
$target.Address=$source.Address 

if($source.Name in "LiLei","HanMeiMei"){
   #copy
}

这一种表达方式更接近java一些。

可行的选择一多,就头疼了,大家有什么意见?

  • src.rar (15.9 KB)
  • 下载次数: 45
分享到:
评论
10 楼 xingqiliudehuanghun 2009-06-17  
我是比较懒,感觉没有必要自己做一个语言系统。也谢简单的应用直接用Perl或JS这样的脚本语言扩展下就可以了。最近特别喜欢Perl
9 楼 lhyasia 2009-06-17  
为前几个雇主(消费电子, 半导体, 通信)工作的时候, 身边总有一两个这样的人自己写个小语言满足日常工作需要, 甚至用户只是他们自己,大部分人用通用的工具如perl。 实际上如果你有时间, 总可以在纸上草拟一个语法,然后借助gnu flex/bison搭一个解释器出来。 我相信有个几年经验的程序员都是可以做到的, 只是做与不做的问题。
8 楼 UniverseSae 2009-06-16  
我是初学者 没用过java里面有'$'这个符号的代码 想请教一下!!!
7 楼 Salin 2009-06-13  
XML写这些表达式的话省掉了编译的功夫
但是 比较冗长。。。
6 楼 fjlyxx 2009-06-13  
我觉得还是用XML的好 
5 楼 qinglangee 2009-06-13  
楼主直接用java的语法不行么
直接
if($source.Name in "LiLei","HanMeiMei"){ 
    #copy  
    
       $target.Name=$source.Name    
       $target.Address=$source.Address   

    #end  
}



if($source.Name in "LiLei","HanMeiMei"){ 
     $target.Name=$source.Name    
     $target.Address=$source.Address   
}


不就挺好
4 楼 xingqiliudehuanghun 2009-06-10  
前不久也遇到了类似的要求,也是使特定的模块支持命令。自己写一个编译器过于复杂了
超过了我的驾驭能力,最后引入Rhino并扩展了下JavaScript使支持我们定义的函数,这样就基本解决了。引入脚本肯定会慢不少,但省去了自己写编译器的麻烦,扩展性也有了保证。
3 楼 云中苍月 2009-06-10  
哎,我们这把年纪的人都是初中学的。
2 楼 Salin 2009-06-10  
LS的我们小学时候就学"LiLei","HanMeiMei"了
1 楼 wendong007 2009-06-10  
LiLei、HanMeiMei

LZ初中英语学的很好啊

相关推荐

    SAS语言抛砖引玉(一位有心人写得很好的SAS基础知识介绍)

    较之于其他语言的语法教程比比皆是,这也确实是一种奇怪的现象。 目前大多的SAS 数据也并不是没有讲到基础内容,而是都草草的介绍了一些语言基础就开始把读者带入统计过程,本来有些初学者心态就很急,而作者这么快...

    SAS 语言抛砖引玉

    SAS语言抛砖引玉》 任何想学习和了解SAS语言的人,学习SAS的好材料,确实很有用。

    SAS 语言抛砖引玉.pdf

    ### SAS语言基础知识详解 #### 一、SAS简介 SAS (Statistical Analysis System) 是一种广泛应用于数据分析、商业智能、预测模型等领域的强大工具。它不仅具备强大的统计分析功能,还能进行数据管理、报告生成等...

    SAS语言抛砖引玉pdf

    从给定的文件信息来看,这是一份名为《SAS语言抛砖引玉》的教程,旨在为初学者提供SAS语言的基础语法教学。SAS(Statistical Analysis System)是一种广泛应用于数据分析、商业智能和预测建模的强大工具,特别是在...

    《SAS 语言抛砖引玉》

    《SAS 语言抛砖引玉》是一本深入浅出介绍SAS编程语言的书籍,对于初学者和有一定基础的SAS用户来说都是极好的学习资料。SAS(Statistical Analysis System)是一种强大的统计分析软件,广泛应用于数据管理和统计分析...

    《SAS语言抛砖引玉》

    《SAS语言抛砖引玉》 任何想学习和了解SAS语言的人。

    等一分钟——Android项目构建性能优化抛砖引玉的副本.docx

    它使用Groovy或Kotlin语言编写构建脚本,支持高度定制化的构建逻辑。Gradle的设计理念在于简化构建流程,同时提供强大的扩展性。 **Gradle基本概念与原理** - **项目和任务**:在每次构建过程中,至少包含一个项目...

    PHP+mysql毕业设计项目源码(3套)

    通过分享,希望能帮到毕业之际的大学生,提供相应的设计思路和编程思路,达到抛砖引玉的效果,也预祝各位顺利毕业,欢迎下载学习。 PHP+mysql毕业设计项目源码(3套) 1、基于PHP的网上书店的设计(论文) 2、基于...

    Verilog 数字系统设计教程(第 2 版)

    作者期望本书能对Verilog设计技术在中国的推广起到抛砖引玉的作用,并通过本书的推广培养一批掌握先进设计技术的人才。此外,书中提及了作者在技术顾问和教育工作中的贡献,以及对未来集成电路设计公司提供技术支持...

    Verilog数字系统设计教程-夏宇闻

    《Verilog数字系统设计教程》是由夏宇闻教授编写的一部关于Verilog设计的入门教材,它被认为是数字系统设计领域的经典之作。该书详细介绍了Verilog硬件描述语言(HDL)的基础知识、设计流程和应用实践,旨在帮助读者...

    抛砖引玉 浅析CCM PFC BOOST电路设计

    抛砖引玉 浅析CCM PFC BOOST电路设计 本文旨在从最常用的PFC拓扑的角度来探讨电源设计的方法,希望电源设计尽可能变得透明,科学和合理,最大限度的提高产品开发效率,降低系统设计风险。 一、CCM PFC BOOST电路...

    【讲义】王毅:如何利用云平台构建容错的APP

    本次,我们将以 亚马逊AWS云平台为例,讨论如何设计一个可以容错的应用,目的是希望对基于AWS云平台的架构设计原则进行一个概要介 绍,从而了解如何基于像AWS这样的云平台进行架构设计,起到抛砖引玉的作用。

    基于java的毕业设计项目(源代码+论文)+3套

    通过分享,希望能帮到毕业之际的大学生,提供相应的设计思路和编程思路,达到抛砖引玉的效果,也预祝各位顺利毕业,欢迎下载学习。 PHP+mysql毕业设计项目源码(3套) 1、JAVA语言考试系统的设计与实现(论文+源代码...

    基于java的毕业设计(源代码+论文)3套(9)

    通过分享,希望能帮到毕业之际的大学生,提供相应的设计思路和编程思路,达到抛砖引玉的效果,也预祝各位顺利毕业,欢迎下载学习。 java+mysql毕业设计项目源码(3套) 1、JAVA3D的网络三维技术的设计与实现(源代码...

    成语故事抛砖引玉.docx

    成语“抛砖引玉”就源自唐朝两位诗人的佳话,不仅流传于文人雅士间,更成为了一种激励和启发他人智慧的策略。 故事发生在唐朝,赵嘏以其诗作“长笛一声人倚楼”受到同代诗人杜牧的极高评价,一时间名声大噪。他的...

Global site tag (gtag.js) - Google Analytics