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