Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 解释器模式是抽象语法树的一种形式吗_Design Patterns_Abstract Syntax Tree_Interpreter Pattern - Fatal编程技术网

Design patterns 解释器模式是抽象语法树的一种形式吗

Design patterns 解释器模式是抽象语法树的一种形式吗,design-patterns,abstract-syntax-tree,interpreter-pattern,Design Patterns,Abstract Syntax Tree,Interpreter Pattern,我正在学习GoF模式,维基百科文章中的一个解释器模式示例引起了我的注意:(我专门研究Java代码片段)。它看起来像一个简单表达式的抽象语法树!关于以ASTs的形式实现数据处理的解释器模式也是如此?从结构上讲,GoF解释器模式(在CS中几乎没有解释器的其他用途)类似于AST 解释器模式通常只有一个操作来计算AST表示的表达式,而许多AST实现提供了其他方法来遍历树。在OO AST实现中,遍历经常结合访问者模式和双重分派。在LISP中,使用列表运算符遍历AST。通常AST不做任何事情,但是GoF解释

我正在学习GoF模式,维基百科文章中的一个解释器模式示例引起了我的注意:(我专门研究Java代码片段)。它看起来像一个简单表达式的抽象语法树!关于以ASTs的形式实现数据处理的解释器模式也是如此?

从结构上讲,GoF解释器模式(在CS中几乎没有解释器的其他用途)类似于AST

解释器模式通常只有一个操作来计算AST表示的表达式,而许多AST实现提供了其他方法来遍历树。在OO AST实现中,遍历经常结合访问者模式和双重分派。在LISP中,使用列表运算符遍历AST。通常AST不做任何事情,但是GoF解释器模式有一些“解释”操作来评估树

GoF模式将AST和解释器组合到同一个东西中,这不如更常见的AST方法灵活,但有时这就是您所需要的


“”是更普遍的名称,在GoF使用错误选择的名称记录它之前和之后-该模式是一个自评估树,GoF解释器模式中没有解释器。

在我看来是这样的。再一次:“让我们重新创造新的词汇来描述众所周知的想法。”。“自20世纪50年代初以来,就有了建立口译员的工作。@IraBaxter这本GoF书的全部目的是将著名的想法分类,并给它们起新的名字。取一些著名的想法,缩小范围,使其效果不如原始想法,然后给结果取一个与原始想法不同的名称。这就是进步?所以基本上是定义一种简单的领域特定语言?有没有正确应用解释器模式的好例子?我已经多次使用表达式树来计算不需要完整解释器的表达式。它们需要一个解析器/fluent接口来将它们构造成一个外部/内部DSL。我不喜欢叫他们“解释器模式”。