【发布时间】:2023-08-05 01:20:01
【问题描述】:
我正在尝试创建一个 AST 并漂亮地打印它。我正在解析 C 语言的一部分。但是,当我必须表示一个空语句时,即
{}
我完全被卡住了,因为我无法简单地创建一个包含类似内容的新数据。或者是以下情况
{{}}
相当于
SScope({})
从技术上讲,我的问题是,我如何能够在 Haskell 中漂亮地打印花括号?所以当我收到
{}
我想漂亮地打印一模一样的,比如
{}
那个。我会做的是这样的:
data Stmt = {}
与其他数据元素一样,但我无法做到这一点。对此有何建议?
【问题讨论】:
-
语法中的语句定义应该包括简单语句和复合语句。复合语句是由
{和}包围的零个或多个语句。所以{}只是一个没有子节点的 CompoundStatement 节点。 -
你能给我一个复合语句的例子吗?因为在实践中,我不确定这到底是什么意思。
-
字面意思是
{...},里面有零个或多个语句。例如,条件语句是if(<boolean expression>) <statement>。<statement>可以替换为像;这样的空语句、像x = 3;这样的简单语句或复合语句,通过使用{开始它并使用}结束它来定义(不终止;)。大括号内是零个或多个语句,所以你可以写if(1) {}或if(1) {x = 3;}或if(1) {x = 3; y = 4;}等。 -
{{}}是一个复合语句,它只包含一个语句,另一个复合语句(恰好是空的)。 -
啊,好的,谢谢,现在我明白了。另外,我必须编辑我的问题,因为我认为我做错了
标签: haskell compiler-construction abstract-syntax-tree pretty-print curly-braces