使用术语“抽象语法树”

我试图进一步理解Scala,有一件令我感到困惑的事情是使用抽象语法树(又名AST)这个术语。

在很多地方,我已经看到程序员使用术语AST来描述一些代码。 下面的例子来自Noel Welsh和Dave Gurnell在描述Type类型的章节中的“Advanced Scala”。

// Define a very simple JSON AST
sealed trait Json
final case class JsObject(get: Map[String, Json]) extends Json
final case class JsString(get: String) extends Json
final case class JsNumber(get: Double) extends Json

我想上面是一棵树,虽然很浅。

                 Json
                  |
      +-----------+-+-----------+
      |             |           |
  JsObject      JsString      JsNumber

我对AST的理解通常在编译器的上下文中,该编译器从代表代码的代码(代码Syntaxt Analysis - >具体语法树 - >抽象语法树)的具体语法树中创建AST。

为什么上面的AST?

我知道作者并没有在编译器的语法分析的上下文中使用该术语,但由于AST通常用于表示代码的抽象表示,为什么有人会使用该术语来描述某些实际的代码?


由于继承树的原因,它不被称为AST。 它被称为AST,因为它是一个树结构,它代表了JSON的语法。

要了解它是如何构成树结构的,请考虑以下示例:

{"a": 42, "b": {"x": "y"}}

这将被解析为以下对象:

JsObject(Map(
    "a" -> JsInt(42),
    "b" -> JsObject(Map(
      "x" -> JsString("y")
    ))
))

其中代表以下树:

         Object
    "a" /       "b"
      Int    Object
       |        | "x"
       42    String
                |
               "y"

这是上述JSON字符串的抽象语法树。

我知道作者没有在编译器的语法分析的上下文中使用该术语

不是编译器,但它们在分析JSON的抽象语法的上下文中使用它。

链接地址: http://www.djcxy.com/p/68217.html

上一篇: Use of the term "Abstract Syntax Tree"

下一篇: Modify Abstract syntax tree eclipse cdt C code