2010-04-01 67 views

回答

4

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

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

的正面效益:

  • 你不必为你写要处理的语言一个完整的,完整的语法。

缺点:

  • 它并不总是很容易挑出感兴趣的源的一部分。例如, 您如何确保孤岛语法不会挑出被注释掉的代码块,除非您的岛语法详细解释了所有注释?岛语法的要点是避免进入这种细节,但在这里你必须。

  • 您现在只能使用孤岛语法来关注问题。如果问题出现了,那么你的岛语法也可能不得不改变,而这并不容易。

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

打电话给我偏见,但我一直在做这种东西很长一段时间。我相信岛语法确实没有那么有用。我提出的替代方案是基于共同基础的许多语言的摊销成本解析器,其名称为DMS Software Reengineering Toolkit

YMMV。