Noa*_*ger 0 java grammar parsing haskell cross-compiling
我正在尝试为 JDK 11.x 创建一个解析库,它读取 Haskell 代码作为输入,然后将其转换为 Java 以供 JVM 执行。我称它为 Jaskell,但我需要知道 Haskell 的正式语法结构,以便确定需要什么类型的解析器 Jaskell(即 LL 或 LR 解析器)。
我需要知道 Haskell 的正式语法结构
由于显着缩进,Haskell 的语法是上下文敏感的。在词法和上下文无关语法中,都有一些歧义需要通过最长匹配(“最大咀嚼”)规则来解决。
语法规范和实现之间确实存在差异,据说它们都没有精确实现规范。还有很多语言扩展。
有一个现成的扫描器定义可以用旧版本的Antlr扫描 Haskell ,但仍然没有解析语法。猜猜您必须从上述项目(Frege、Eta)或ghc本身中获取解析器。
查看源代码树和ghc-lib-parser 包的描述,我们通过这篇文章了解到 GHC 的解析器是由happy parser generator 生成的,生成了一个LALR (1) 解析器。这意味着 Haskell 的语法是明确的,不需要happy 的GLR生成能力。
制作一个读取 Haskell 代码的解析库……然后将其翻译成 Java
您想创建一个 Haskell-Java 交叉编译器。看看我要说的类型系统的差异,这太牵强了。可以将 Haskell 压缩到 JVM 字节码中,但我无法想象,任何一种生成的 Java 都可能非常有用。另一方面,Haskell 在内部编译为所谓的“核心语言”,基本上是一种类型化的 lambda 演算。这可能是一个更直接的起点。
如果您有兴趣,这里有一个Haskell-Javascript交叉编译器(基于 ghc),还有一个javascript-java交叉编译器。问题解决了!或者不是吗?
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |