如何快速查看Haskell表达式解析结构?能否让GHCi显示带括号的AST?
如何让GHCi显示Haskell表达式的完整括号解析形式
核心方法:启用显式括号打印选项
GHCi提供了-fprint-explicit-parens选项,能让表达式打印时显示所有AST节点对应的括号,完全还原解析顺序。操作步骤:
- 打开GHCi,先设置选项:
:set -fprint-explicit-parens - 定义你需要测试的自定义运算符(以你给出的例子为例):
infixl 6 ¤ (¤) = (+) -- 仅为占位定义,不影响解析逻辑 infixl 7 ⏆ (⏆) = (*) infixr 8 ♂ (♂) = (^) - 输入目标表达式,GHCi会直接输出带完整括号的解析结果:
7 ¤ 2 ⏆ 4 ⏆ 3 ¤ 1 ♂ 3 ♂ 2 -- 输出:(7 ¤ ((2 ⏆ 4) ⏆ 3)) ¤ (1 ♂ (3 ♂ 2))
其他快速理解表达式解析逻辑的方法
- 直接查询运算符属性:用
:i(:info的缩写)命令查看单个运算符的优先级和结合性,比如:
记住规则:优先级数字(0-9)越大,运算符越先被解析;左结合(infixl)从左到右分组,右结合(infixr)从右到左分组。:i (¤) -- 输出:infixl 6 ¤,说明是左结合,优先级6 - 分步拆分测试:把复杂表达式拆成多个子部分,逐个输入GHCi观察解析结果,比如先测试
2 ⏆ 4 ⏆ 3,会得到((2 ⏆ 4) ⏆ 3),验证左结合规则;测试1 ♂ 3 ♂ 2得到(1 ♂ (3 ♂ 2)),验证右结合规则。 - 括号强制对比:手动给表达式加不同的括号,输入GHCi后对比结果是否和原表达式一致,以此反推原表达式的解析顺序。
内容的提问来源于stack exchange,提问作者Blue Nebula
相关产品推荐
相关产品推荐

