Skip to content

Latest commit

 

History

History

Interpreter

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
Given a language,define a representation for its grammar along with an interpreter that uses the
 representation to interpret sentences in the language.
 
 很好玩,解析js脚本的ScriptManager(不仅仅js)

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

何时使用

当有一个简单的语言需要解释执行,并且可以将该语言的每一个规则表示为一个类时,就可以使用解释器模式。
优点

1. 将每一个语法规则表示成一个类,方便与实现简单的语言。
2. 由于使用类表示语法的规则,可以较容易改变或扩展语言的行为。
3. 通过在类结构中加入新的方法,可以在解释的同时增加新的行为。

概念其实很简单。在有些问题上,我们可能希望自定定义简单的语言来描述,然后我们自己能解释它。

解释器模式一般包括四种角色:

1. 抽象表达式:该角色为一个接口,负责定义抽象的解释操作。
2. 终结符表达式(terminal expression):实现抽象表达式接口的类。
3. 非终结符表达式:也是实现抽象表达式的类。
4. 上下文(Context):包含解释器之外的一些全局信息。

使用该模式设计程序一般需要三个步骤:

1. 解析语句中的动作标记。
2. 将标记规约为动作。
3. 执行动作。

这种模式一般会应用到一些特殊的问题上,使用这种模式一般需要了解形式语言中的基本知识。
js内核就是一个强大的解释器。

简单的解释器模式,我们需要解释出来表达式的信息即可;而更深一层的,我们需要把表达式中的内容,
翻译成我们程序运行的一部分来执行。

解释器核心

  1. 抽象语法树的生成(terminal & non-terminal)