岛语语法antlr3

时间:2010-04-01 14:51:00

标签: java parsing antlr grammar lexer

在antlr3中使用“岛语法”是什么以及如何使用?

2 个答案:

答案 0 :(得分:4)

岛语法是将大部分语言视为文本(“水”)的一种语法,并选择使用语法规则(“岛”)解析感兴趣的语言部分。例如,您可以选择构建岛语法来挑选C#程序中找到的所有表达式,并忽略变量/方法/类声明和语句语法(if,while,...)。

真正的问题是,“你应该使用岛语法吗?”。

积极的好处:

  • 您不必为要处理的语言编写完整,完整的语法。

缺点:

  • 选择感兴趣的部分并不总是很容易。例如, 你如何确保岛语法没有找到被注释掉的代码块,除非你的岛语法详细解释了所有的注释?岛语语法的目的是避免进入那种细节,但在这里你必须这样做。

  • 您现在只能使用岛语法来关注问题。如果问题发生了变化,那么你的岛屿语法也可能不得不改变,这并不总是那么容易。

  • 程序操作中最有趣的问题要求您不仅能够确定语法(例如,“解析”)并构建某种树来操作,而且您还能够确定其中的含义符号。使用岛语法,你已经有效地注销了这样做的可能性(除非你想要包括块,声明等的所有语法......哎呀突然它不是岛语法而是小大陆语法) 。并且真的限制了你可以做的事情。

叫我有偏见,但我一直在做这种事情。我相信岛屿语法确实不那么有用。我建议的替代方案是基于共同基础的多种语言的摊销成本解析器,其名为DMS Software Reengineering Toolkit

因人而异。

答案 1 :(得分:1)

嗯,我不确定你到底是什么意思,但既然你还没有提到你到目前为止写的内容,我就从这里开始:

http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control