我需要制作一个输出类似 SQL 的语言的 DSL。首先,我想使用递归下降解析器 + 一种简单的代码生成方法来推出我自己的转译器。但是由于 DSL 语言非常简单,输出语言也很简单,我意识到我会尝试找到一种时间和精力更少、消耗更少的方法,而不是重新发明轮子,比如更强大的 C 预处理器版本。首先想到的是m4,我以前只听说过,到目前为止从未使用过。我正在阅读一些教程/文档,但我仍然不确定是否可以使用此工具实现我的目标。例如我想转:
display a,b,c if a.substring(0, 3) == b.substring(0, 3) and (c + 8 > 20 || c == 0)
会翻译成这样的东西:
SELECT A, B, C from tbl where substring(A, 0, 3) = substring(B, 0, 3) and (c + 8 > 20 or c = 0)
那么我有什么好的方法来完成这个?继续学习M4
还是我应该尝试另一种工具(如果是的话,哪个)或者我最好自己做编译器实现?