Haskell的语法是什么,可以解析哪种类型的解析器?

时间:2019-11-28 15:57:13

标签: java parsing haskell cross-compiling grammar

我正在尝试为JDK 11.x创建一个解析库,该库读取Haskell代码作为输入,然后将其转换为Java以由JVM执行。我称之为Jaskell,但我需要了解Haskell的正式语法结构,以确定Jaskell需要的解析器类型(即LL或LR解析器)。

1 个答案:

答案 0 :(得分:4)

  

我需要了解Haskell的形式语法结构

由于Haskell's grammar

context sensitivesignificant indentation。在词法和上下文无关的语法中,都存在longest match(“最大munch”)规则要解决的一些歧义。

syntax specification与实现之间确实存在差异,据推测它们均不能精确实现规范。也有很多language extensions

有一个ready-made scanner definition可以用旧版本的Antlr扫描Haskell,但仍然是no parsing grammar。猜猜您必须从上述项目(Frege,Eta)或ghc本身中获取解析器。

通过查看source treeghc-lib-parser package的描述,我们可以了解到this post GHC的解析器是由happy parser generator生成的,并生成了LALR (1)解析器。这意味着Haskell的语法是明确的,不需要快乐的GLR生成能力。此外,由于高兴允许注释描述最终的AST,因此可以将其分类为Attribute Grammar

  

建立一个解析库,读取Haskell代码...然后将其转换为Java

您要创建一个Haskell-Java交叉编译器。仅查看我要说的类型系统的差异,这是很牵强的。很明显,可以将Haskell压缩到JVM字节码中,但是我无法想象,任何一种生成的Java都可能非常有用。然后在Java 11中现在有了var关键字,但我认为,仍然有很多情况下,您也必须引出变量的显式类型。硬东西。我认为,编译字节代码比真正交叉编译要容易得多。乍一看只是一些想法。

如果您有兴趣,可以使用Haskell-Javascript交叉编译器(基于ghc)和javascript-java交叉编译器。问题解决了!不?