antlr3 中的“孤岛语法”是什么以及如何使用?
2 回答
孤岛语法是一种将大部分语言视为文本块(“水”)并挑选出感兴趣的语言部分以使用语法规则(“孤岛”)进行解析的语法。例如,您可以选择构建一个岛文法来挑选出在 C# 程序中找到的所有表达式,而忽略变量/方法/类声明和语句语法(if、while、...)。
真正的问题是,“你应该使用岛语法吗?”。
积极的好处:
- 您不必为要处理的语言编写完整、完整的语法。
不足之处:
挑选出感兴趣的部分并不总是那么容易。例如,您如何确保 island 语法不会拾取被注释掉的代码块,除非您的 island 语法对所有注释进行了详细的词法分析?孤岛语法的重点是避免进入那种细节,但在这里你必须这样做。
您只能使用岛语法来专注于您现在理解的问题。如果问题发生了变化,那么你的孤岛语法可能也必须改变,这并不总是那么容易。
程序操作中最有趣的问题要求您不仅能够确定语法(例如,“解析”)并构建某种树来操作,而且您还能够确定符号的含义。使用孤岛语法,您已经有效地取消了这样做的可能性(除非您想包含块、声明等的所有语法......哎呀突然它不是孤岛语法而是小大陆语法) . 这确实限制了您可以做的事情。
叫我有偏见,但我做这种事情已经很久了。我相信岛语法真的没那么有用。我提出的替代方案是基于通用基础的多种语言的摊销成本解析器,其称为DMS Software Reengineering Toolkit。
YMMV。
好吧,我不确定您的意思,但是由于您尚未提及到目前为止所写的内容,因此我将从这里开始:
http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control