在 Haskell 中使用大括号创建数据
Create data with Curly Braces in Haskell
我正在尝试创建一个 AST 并将其打印出来。我正在解析 C 语言的一部分。但是,当我必须表示一个空语句时,即
{}
我完全卡住了,因为我不能简单地创建一个包含类似内容的新数据。或者当它是以下
{{}}
相当于
SScope({})
从技术上讲,我的问题是,我如何能够在 Haskell 花括号中进行漂亮的打印?所以当我收到
{}
我想打印出完全相同的效果,比如
{}
那个。我会做的是这样的:
data Stmt = {}
与其他数据元素一样,但我无法做到这一点。有什么建议吗?
您需要区分语言的词汇成分(大括号等)和用于表示句法结构的 Haskell 数据类型。
Haskell 端应该有类似
的东西
data Stmt =
CompoundStmnt [Stmt]
| ValueStmt Identifier Expression
| -- And so on for all the other types of statement you want.
然后定义一个识别大括号的解析器,以及一个打印出大括号括起来的值的漂亮打印机。
我正在尝试创建一个 AST 并将其打印出来。我正在解析 C 语言的一部分。但是,当我必须表示一个空语句时,即
{}
我完全卡住了,因为我不能简单地创建一个包含类似内容的新数据。或者当它是以下
{{}}
相当于
SScope({})
从技术上讲,我的问题是,我如何能够在 Haskell 花括号中进行漂亮的打印?所以当我收到
{}
我想打印出完全相同的效果,比如
{}
那个。我会做的是这样的:
data Stmt = {}
与其他数据元素一样,但我无法做到这一点。有什么建议吗?
您需要区分语言的词汇成分(大括号等)和用于表示句法结构的 Haskell 数据类型。
Haskell 端应该有类似
的东西data Stmt =
CompoundStmnt [Stmt]
| ValueStmt Identifier Expression
| -- And so on for all the other types of statement you want.
然后定义一个识别大括号的解析器,以及一个打印出大括号括起来的值的漂亮打印机。