解析 S 表达式

Parsing S Expression

给定以下构成 S 表达式 的定义,来自 Yorgey 教授的 course

data Atom = N Integer | I Ident deriving Show

data SExpr = A Atom | Comb [SExpr] 导出显示

以下的完整数据类型(在 Haskell 中)应该是什么?

(bar (foo) 3 5 874)

我相信它会是这样的

Comb
    [ A (I "bar")
    , Comb
        [ A (I "foo")
        ]
    , A (N 3)
    , A (N 5)
    , A (N 874)
    ]

每当遇到左括号时,您都会开始一个新的 Comb 表达式,因此 (foo)Comb [A (I "foo")]foo 只是 A (I "foo")

我假设 Ident 类型是字符串。

  • bar 作为 Atom 是 I "bar",作为 SExpr 是 A (I "bar")
  • 同上 foo
  • (foo) 是一个 SExpr,构造为 Comb [ A (I "foo") ]
  • 3 作为 Atom 是 N 3 而作为 SExpr 是 A (N 3)
  • 同上 5874
  • (bar (foo) 3 5 874)(这是一个 SExpr)的完整构造是

.

Comb [ A (I "bar")
     , Comb [ A (I "foo") ]
     , A (N 3)
     , A (N 5)
     , A (N 874)
     ]