首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell词法布局规则的实现

Haskell词法布局规则的实现
EN

Stack Overflow用户
提问于 2014-08-18 00:32:51
回答 1查看 299关注 0票数 6

我一直在研究一种宠物语言,它有类似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)

Haskell编译器(如GHC等)如何处理这种情况?是否有一种简单的方法来实现parse-error(t),使其能够处理这种情况(以及其他我尚未注意到的情况)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-22 03:53:23

最后,我实现了JISON编译的解析器使用的解析算法的自定义版本,该解析器接受不变的状态对象和令牌,并在返回之前对令牌执行尽可能多的工作。然后,我可以使用这个实现来检查令牌是否会产生解析错误,并且很容易回滚到解析器的以前状态。

它运行得相当好,尽管它现在有点问题。您可以在这里找到代码:https://github.com/mystor/myst/blob/cb9b7b7d83e5d00f45bef0f994e3a4ce71c11bee/compiler/layout.js

我试着做@augustss建议的事情,使用错误产生来伪造令牌的插入,但是看起来JISON没有我需要的所有工具来获得一个可靠的实现,重新实现一个精简版本的解析算法变得更容易,并且与原始文档更好地排列在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25354942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档