我正在努力加深对Scala的理解,有一件事让我感到困惑,那就是术语“抽象语法树”(也称为AST)的使用。
现在,在许多地方,我看到程序员使用术语AST来描述某些代码。以下示例来自Noel Welsh和Dave Gurnell的书籍《高级Scala》中描述类型类模式的部分。
我猜上面的内容是一颗树,尽管非常浅显。
现在,在许多地方,我看到程序员使用术语AST来描述某些代码。以下示例来自Noel Welsh和Dave Gurnell的书籍《高级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的理解通常是在编译器的上下文中,它从表示代码的具体语法树(Code Syntax Analysis -> Concrete Syntax Tree)创建一个抽象语法树(Abstract Syntax Tree)。
为什么上面的内容是AST?
尽管作者没有在编译器的语法分析上下文中使用这个术语,但由于AST通常用于表示代码的抽象表示形式,因此为什么会有人使用这个术语来描述一些实际的代码呢?