打字猴:1.700474294e+09
1700474294
1700474295
1700474296
1700474297
1700474298 设计模式之禅 [:1700454049]
1700474299 设计模式之禅 27.2 解释器模式的定义
1700474300
1700474301 解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在项目中使用较少,其定义如下:Given a language,define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.(给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。)
1700474302
1700474303 解释器模式的通用类图如图27-4所示。
1700474304
1700474305
1700474306
1700474307
1700474308 图27-4 解释器模式通用类图
1700474309
1700474310 ❑AbstractExpression——抽象解释器
1700474311
1700474312 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成。
1700474313
1700474314 ❑TerminalExpression——终结符表达式
1700474315
1700474316 实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。具体到我们例子就是VarExpression类,表达式中的每个终结符都在栈中产生了一个VarExpression对象。
1700474317
1700474318 ❑NonterminalExpression——非终结符表达式
1700474319
1700474320 文法中的每条规则对应于一个非终结表达式,具体到我们的例子就是加减法规则分别对应到AddExpression和SubExpression两个类。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。
1700474321
1700474322 ❑Context——环境角色
1700474323
1700474324 具体到我们的例子中是采用HashMap代替。
1700474325
1700474326 解释器是一个比较少用的模式,以下为其通用源码,可以作为参考。抽象表达式通常只有一个方法,如代码清单27-8所示。
1700474327
1700474328 代码清单27-8 抽象表达式
1700474329
1700474330 public abstract class Expression{
1700474331
1700474332 //每个表达式必须有一个解析任务
1700474333
1700474334 public abstract Object interpreter(Context ctx);
1700474335
1700474336 }
1700474337
1700474338 抽象表达式是生成语法集合(也叫做语法树)的关键,每个语法集合完成指定语法解析任务,它是通过递归调用的方式,最终由最小的语法单元进行解析完成。终结符表达式如代码清单27-9所示。
1700474339
1700474340 代码清单27-9 终结符表达式
1700474341
1700474342 public class TerminalExpression extends Expression{
1700474343
[ 上一页 ]  [ :1.700474294e+09 ]  [ 下一页 ]