我必须为名为AWS redshift的postgres(PG)派生方言单元测试脚本,该方言具有一些与PG不向后兼容的功能。我使用正则表达式从lexing out the unwanted things通过thread单元测试PG上的红移SQL代码。目前,注册复杂性只是易于管理(DISTKEY SORTKEY,DISTSTYLE和ENCODE)。根据我的代码审查人员对正则表达式的复杂性及其脆弱性的要求,我开始研究其他可行的方法,并偶然发现使用ANTLR。我的想法是生成并使用词法分析器而不是我的正则表达式。以下是您在本主题末尾阅读示例计划时可以帮助我的一些常见问题。
我在这个ANTLR PG git project中看了一个简单的例子来获取灵感,但PG是一个大野兽。所以相反,我正在尝试做一些努力估计;如果他们正在估计采取这种方式的“砰砰作响”,这项练习对人们来说可能是有价值的。
我在下面有一个代表工作单的示例计划(假设我使用ANTLR作为语言不可知):
为PG借用一些ANTLR语法。我遇到了这个{{3}}。我现在开始安装和运行它。该项目中的代码是否足以满足我的目的?那段代码丢失了什么? ....
添加Redshift特定字词。这不应该太难
生成所有访客和听众
实施访问者(?)
我可以做一些简单的事情来返回访问者中解析的标记。因为我只是
想要了解Redshift的具体内容吗?
Lex在侦听器中输出红移(当遇到遇到红移的特定令牌时,这只是返回类似“”的字符串吗?)
针对某些示例SQL代码运行以测试它会泄漏红色内容,我可以在PG实例上测试生成的红移代码。