分类: 项目管理
2011-08-04 20:39:34
结构:
l Context 为被解释的内容。
l TerminalExpression为终结符表达式,实现文法中与终结符关联的内容的解释操作
l NonterminalExpression 非终结符表达式,为文法中非终结符实现解释操作,文法中每一条规则都需要一个具体的非终结符表达式类。
意图:给定一个语言,定义它的文法的一种表示,并给定一个解释器,该解释器利用该表示来解释语言中的句子。
适用性:当有一个语言需要解释执行,并且你可以将语言中的句子表示成一个抽象语法树时,可以使用解释器模式。而当存在以下情况时,该模式效果更好:
(1)该文法简单。对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器是更好的选择。他们无需构建抽象语法树即可解释表达式,这样可以节省空间和时间。
(2)效率不是一个关键的问题。最高效的解释器通常不是通过直接解释语法分析树来实现的,而是首先将它们转换成另一种形式。例如正则表达式通常被转换成状态机。但是即使在这种情况下,转换器仍可以用解释器模式来实现,该模式仍然是有用的。
举例:(1)正则表达式:
解释器为正则表达式定义了一个文法,如何表示一个特定的表达式,以及如何解释表达式。通过一种通用的搜索算法来解释执行一个正则表达式,该表达式定义了待匹配字符串的集合。
(2)浏览器: 浏览器接受HTML代码后,通过解释后在将内容呈现在页面上。
示例: