2

目前我正在开发一个解析 Haskell 语言的 JavaScript 解析器。我正在研究 Esprima.JS 并希望在它之上构建将解析 Haskell 语言。根据我的理解,我需要从一个基本部分开始,比如数字(它们在 Haskell 语言中的使用方式)运算符,然后是高级选项。我对它非常陌生,任何有关资源的帮助都对我有用

我正在遵循 Esprima.js 的这种模式

Token={
       //Haskell
        PosToken:10
//Should i have to declare all tokens of Haskell over here
       };
TokenName={};
TokenName[Toke.PosToken]='PosToken';
//Should i have to all tokens of Haskell Overhere
FnExprTokens=[//Assignment and other operators];

Syntax={
//Haskell Expressions
HsExp:'HsExp',
HsStmt:'HsStmt',
HsFieldUpdate: 'HsFieldUpdate',
//and so on for other expression types
};
PropertyKind={};
//Error Messages
Messages={
};

Regex={};

我应该遵循这个过程还是改进其他事情。如果我想在 Esprima.js 上构建(http://esprima.org/),流程是否相同。Esprima.js 比 acorn.js 更容易理解(虽然代码行更少,速度也更快)。我想将 Haskell 解析为 Mozilla AST 格式。任何帮助将不胜感激。

4

1 回答 1

1

不如不实现自己的 Haskell 解析器,而是重用现有的解析器:有许多用 Haskell 编写的 Haskell 解析器:

然后,您可以使用GHCJS将其编译为 JavaScript ,它是 GHC 的一种变体,几乎可以将所有 Haskell 编译为 JavaScript。

然后,您可以简单地从您的“常规”JavaScript 代码调用 GHCJS 生成的 JavaScript 代码。

GHCJS 生成的最终 JS 代码并不适合人类阅读,而且它也比手写 JS 大得多(但 Google Closure Compiler 减轻了一点),但性能相当好。

至于 Mozilla AST 格式,您可以在 Haskell 代码中将生成的数据结构转换为 JS 可口,然后将其转换为 Mozilla AST,或者直接在 Haskell 代码中转换为 Mozilla AST。当然,你最终可能会写很多 Haskell 代码,这可能是也可能不是你想要的,但考虑到你一开始就试图解析 Haskell,我假设你不是敌人它。

于 2015-04-29T23:34:01.627 回答