首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写解释器,需要帮助来表示这些数据

编写解释器,需要帮助来表示这些数据
EN

Stack Overflow用户
提问于 2010-09-17 09:53:18
回答 2查看 220关注 0票数 1

我正在写一个小的解释器来显示一个Backus-Naur形式的例子,我想寻求一些数据的帮助。

代码语言:javascript
复制
<statement> : <assignment> | HALT | PRINT(<variable>)
<assignment> : <variable> = <expression>
<expression> : <term> | <term><operator><expression>
<term> : <number> | <variable>
<variable> : x | y | z
<operator> : + | -
<number> : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

正如您所看到的,所有内容都封装在一条语句中。然后是一个赋值和表达式。表达式封装了一个术语,而术语又封装了一个数字和一个变量。赋值封装了一个变量和一个表达式。我的问题是,我应该使用什么数据结构来表示所有这些内容?我认为它应该是一个集合,但这就提出了一个问题,我应该有嵌套的集合吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-17 10:40:57

这看起来像是一个简单的表达式解析器,其中添加了一些命令(打印和停止)。解析这样的东西最简单的方法可能是使用recursive descent parser。如果您正在构建解释器,则可以在解析时解释表达式,或者构建表达式的后缀(或前缀)表示以供稍后解释。

票数 1
EN

Stack Overflow用户

发布于 2010-09-17 10:08:28

我将使用面向对象的方法:

代码语言:javascript
复制
public class State { /* ... */ }
public abstract class Statement {
  // ...
  public abstract void evaluate(State state);
  // ...
}

public class AssignmentStatement extends Statement {
  // ...
  private Variable var;
  private Expression expr;
  // ...
}

public class HaltStatement extends Statement { /* ... */}

public class PrintStatement extends Statement {
  private Variable var;
}

诸若此类。根据需要与变量关联的信息量(可能是声明变量的位置、出现的行和列,等等),您可以使用Strings作为变量类型,使用ints作为number类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3732176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档