首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“抽象语法树”一词

使用“抽象语法树”一词
EN

Stack Overflow用户
提问于 2018-03-18 17:53:09
回答 1查看 317关注 0票数 3

我正在努力加深对Scala的理解,而让我困惑的是抽象语法树(又名AST)这一术语的使用。

在很多地方,我已经看到程序员使用AST这个词来描述一些代码。下面的示例来自Noel和Dave在描述Type模式的章节中的"Advanced“一书。

代码语言:javascript
复制
// 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

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

代码语言:javascript
复制
                 Json
                  |
      +-----------+-+-----------+
      |             |           |
  JsObject      JsString      JsNumber

我对AST的理解一般是在编译器的上下文中,编译器从表示代码的具体语法树(,->,具体语法树,->抽象语法树)创建AST。

为什么上面的是AST?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-18 18:13:38

它不是因为继承树而被称为AST。它被称为AST,因为它是一个树结构,它表示JSON的语法。

要查看它是怎样的树结构,请考虑以下示例:

代码语言:javascript
复制
{"a": 42, "b": {"x": "y"}}

这将被解析为以下对象:

代码语言:javascript
复制
JsObject(Map(
    "a" -> JsInt(42),
    "b" -> JsObject(Map(
      "x" -> JsString("y")
    ))
))

它表示以下树:

代码语言:javascript
复制
         Object
    "a" /      \ "b"
      Int    Object
       |        | "x"
       42    String
                |
               "y"

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

我知道作者并没有在编译器的语法分析中使用这个术语。

不是编译器,而是在分析JSON的抽象语法时使用它。

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

https://stackoverflow.com/questions/49351127

复制
相关文章

相似问题

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