我一直在研究一种宠物语言,它具有类似Haskell的语法.Haskell做的一件很好的事情,我一直试图复制,是它插入{,}和; 在解析步骤之前,基于代码布局的标记.
我找到了http://www.haskell.org/onlinereport/syntax-iso.html,其中包含了如何实现布局程序的规范,并制作了它的一个版本(当然,为我修改了(更简单) ) 语言).
不幸的是,我输出的输出不正确:
f (do x y z) a b
它应该是生成令牌流ID ( DO { ID ID ID } ) ID ID,而是生成令牌流ID ( DO { ID ID ID ) ID ID }.
我想这是由于我对parse-error(t)(parse-error(t) = false)的实现不满意,但我不知道如何parse-error(t)有效地实现.
像GHC等Haskell编译器如何处理这种情况?是否有一种简单的方法可以实现parse-error(t)它处理这种情况(希望其他人还没有注意到)?