365体育在线手机版

当前位置: 主页 > 365体育 >

折腾Java设计方法之说冥器方法

时间:2020-03-21 19:31来源:原创 作者:admin 点击:
说冥器方法是类的举措方法。给定一个言语以后,说冥器方法可以定义出其文法的一种表现,并同时供应一个说冥器。客户端可以应用这个说冥器来疏解这个言语中的句子。 意图 给定

  说冥器方法是类的举措方法。给定一个言语以后,说冥器方法可以定义出其文法的一种表现,并同时供应一个说冥器。客户端可以应用这个说冥器来疏解这个言语中的句子。

  意图 给定一个言语,定义它的文法表现,并定义一个说冥器,这个说冥器应用该标识来疏解言语中的句子。

  主要处理 关于一些固定文法构建一个说明句子的说冥器。

  甚么时分应用 假定一种特定类型的结果迸发的频率足够高,那么可以就值得将该结果的各个实例表述为一个复杂言语中的句子。多么便可以构建一个说冥器,该说冥器经过说明这些句子来处理该结果。

  若何处理 构件语法树,定义终结符与非终结符。

  关键代码 构件状况类,包含说冥器以外的一些全局信息,深刻是 HashMap。

  类图

  img

  可以看出左边的协作图(object collaboration diagram)展现出运转时的说冥器方法。Client向左边笼统语法树发送说明恳求,恳求被转发并向下到树结构的一切对象。

  笼统说冥器(AbstractExpression/Expression):声明一个一切具体表达式都要完成的笼统接口(或许笼统类),接口中主假设一个interpret()方法,称为说明操作。具体说明义务由它的各个完成类来完成,具体的说冥器辨别由终结符说冥器TerminalExpression和非终结符说冥器NonterminalExpression完成。

  终结符表达式(TerminalExpression):完成与文法中的元素相干联的说明操作,素日一个说冥器方法中只需一个终结符表达式,但有多个实例,对应不合的终结符。终结符一半是文法中的运算单位,比如有一个复杂的公式R=R1+R2,在外面R1和R2就是终结符,对应的解析R1和R2的说冥器就是终结符表达式。

  非终结符表达式(NonterminalExpression):文法中的每条规矩对应于一个非终结符表达式,非终结符表达式深刻是文法中的运算符或许其他关键字,比如公式R=R1+R2中,+就长短终结符,解析+的说冥器就是一个非终结符表达式。非终结符表达式依据逻辑的复杂水平而添加,准绳上每个文律例则都对应一个非终结符表达式。

  状况角色(Context):这个角色的义务深刻是用来寄存文法中各个终结符所对应的具体值,比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需求寄存到状况角色中,很多状况下我们应用Map来充当状况角色就足够了。

  跳转到源码地址

  复杂的一个说冥器计算加减乘除算法,状况高低文没有效好,其实计算规矩更多的是报答设定的了。

  本次的笼统收受接管器用的是笼统类,用接口交换也能够。 (责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
推荐内容