精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-09
最后修改:2009-06-13
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一些。 可行的选择一多,就头疼了,大家有什么意见? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-10
LiLei、HanMeiMei
LZ初中英语学的很好啊 |
|
返回顶楼 | |
发表时间:2009-06-10
LS的我们小学时候就学"LiLei","HanMeiMei"了
|
|
返回顶楼 | |
发表时间:2009-06-10
哎,我们这把年纪的人都是初中学的。
|
|
返回顶楼 | |
发表时间:2009-06-10
前不久也遇到了类似的要求,也是使特定的模块支持命令。自己写一个编译器过于复杂了
超过了我的驾驭能力,最后引入Rhino并扩展了下JavaScript使支持我们定义的函数,这样就基本解决了。引入脚本肯定会慢不少,但省去了自己写编译器的麻烦,扩展性也有了保证。 |
|
返回顶楼 | |
发表时间: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 } 不就挺好 |
|
返回顶楼 | |
发表时间:2009-06-13
我觉得还是用XML的好
|
|
返回顶楼 | |
发表时间:2009-06-13
最后修改:2009-06-13
XML写这些表达式的话省掉了编译的功夫
但是 比较冗长。。。 |
|
返回顶楼 | |
发表时间:2009-06-16
我是初学者 没用过java里面有'$'这个符号的代码 想请教一下!!!
|
|
返回顶楼 | |
发表时间:2009-06-17
为前几个雇主(消费电子, 半导体, 通信)工作的时候, 身边总有一两个这样的人自己写个小语言满足日常工作需要, 甚至用户只是他们自己,大部分人用通用的工具如perl。 实际上如果你有时间, 总可以在纸上草拟一个语法,然后借助gnu flex/bison搭一个解释器出来。 我相信有个几年经验的程序员都是可以做到的, 只是做与不做的问题。
|
|
返回顶楼 | |