问题标签 [interpreter-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3429 浏览

design-patterns - 为什么解释器模式很烂?

Steve Yegge 对设计模式的评论中,他将解释器模式称为“笑话”。他接着谈到编译器的看法发生了怎样的变化,但解释性语言仍然是如何流行的,尽管我看不出这与模式有何联系。

有人要开导这个无知的学生吗?

0 投票
10 回答
1901 浏览

design-patterns - INTERPRETER 是反模式吗?

对我来说,Interpreter 模式听起来很像被称为 Greenspun 第十条规则的反模式:

任何足够复杂的 C 或 Fortran 程序都包含一个临时的、非正式指定的、充满错误的、缓慢的 Common Lisp 一半的实现。

也就是说,如果您需要使用解释器,您可能会创建一些缓慢、临时且指定不明确的东西。正确的解决方案是从一开始就使用正确的语言。

或者,也可以将一种众所周知的、明确指定的语言嵌入到您的应用程序中,例如 Guile(GNU 可嵌入方案)。或者使用 Haskell 作为嵌入式领域特定语言。

但我在实践中还没有看到这一点——您在构建自己的嵌入式语言方面有什么经验?这是个好主意吗?它比嵌入已经存在的语言更好吗?

(我不是特别喜欢 lisp。这很好,但 C、Haskell 和 python 以及许多其他语言也是如此。)

0 投票
2 回答
5674 浏览

design-patterns - 解释器模式示例

我很想知道一些解释器模式的实时示例。我能够找到一些重复的示例,例如“正则表达式”示例。任何人都可以将我引向其他示例吗?

0 投票
3 回答
2415 浏览

java - 在复合结构上使用解释器模式

我被要求使用CompositeRecursive Descendent ParserInterpreter制作表达式评估器。

这是语法

任务是:

该项目的目标是基于 Composite、Recursive Builder 和 Interpreter,获得条件表达式,进行语法分析并构建其复合树。从树开始,您必须根据包含内部变量值的外部上下文(从属性文件中读取)来评估条件的结果

现在,我注意到的第一件事是Interpreter使用了Composite结构,因此使用evaluate(:Context)方法扩展我的Composite结构似乎是个好主意。

我四处询问,但有人告诉我这不是完成任务的方法。似乎我已经构建了解释器树,从复合树开始(这对我来说是非常荒谬的,因为我已经有了一棵树可以使用!)。

所以我使用Composite + Recursive Builder构建了我的树,它识别输入并构建树而没有任何问题。

但问题是:如何将解释器应用于我的结构?

这是我的类图(有些是意大利语,但很容易理解)

Composite+Builder类图

如果我做对了,Interpreter会为每个语法规则使用一个类,所以我必须创建一个cond类,然后是一个termb,等等。

但是我如何将它们链接到我的复合材料?

0 投票
1 回答
738 浏览

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

我正在学习 GoF 模式,维基百科文章中的解释器模式示例引起了我的注意:http ://en.wikipedia.org/wiki/Interpreter_pattern (我正在专门研究 Java 代码片段)。它看起来像一个简单表达式的抽象语法树!那么解释器模式是以 AST 的形式实现数据处理的吗?

0 投票
1 回答
245 浏览

c++ - 解释器模式中的错误处理

假设我想将阿拉伯数字 (1+2) 或罗马数字 (I+II) 相加,并使用如下所示的解释器模式:

(代码来自这里:https ://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Interpreter )

如何确保正确处理错误查询(1+II)?我能想到的唯一解决方案是以某种方式使用强制转换,但这听起来不像是一个优雅的解决方案。还是不应该那样使用模式?

当然,一种选择是为此编写两个单独的函数,但我很好奇它是否可以在一个函数中完成,因为我想将此模式用于更复杂的上下文无关语法。

编辑:我的问题也在这里描述。我引用相关部分:

然而,引入一种语言及其附带的语法也需要对拼写错误的术语或错位的语法元素进行相当广泛的错误检查。

所以我的主要问题是:如何最好地设计广泛的错误检查?

0 投票
1 回答
150 浏览

design-patterns - 装饰器与解释器模式

我最近学习了解释器模式。我发现装饰器和解释器之间有一些相似之处。它们具有相似的结构。

我在这种情况下看:解释器中的一种非终端行为和一种终端行为。它看起来与装饰器非常相似。可能有非终端行为调用相同的非终端行为,然后调用终端行为。这似乎非常类似于将装饰器应用于对象上的相同装饰器。

装饰器是解释器的特殊情况吗?

0 投票
1 回答
2290 浏览

design-patterns - 终端和非终端符号

我目前正在阅读有关解释器模式的信息,它在那里说明了终端和非终端符号。所以我去了维基百科并阅读了它。但我仍然不明白什么是终端符号和非终端符号。你能给我一些编程的例子吗?我不想复制粘贴维基百科页面......我想要真实世界的例子。

0 投票
1 回答
1112 浏览

java - 解释器模式和访问者模式有什么区别?

我很难理解这两种设计模式。

您能否给我上下文信息或示例,以便我可以清楚地了解并能够绘制出两者之间的差异。

谢谢。