小编pav*_*kha的帖子

在Haskell的Parsec中解析基于缩进的语法

我正在尝试使用Parsec解析Haskell中基于缩进的语言(想想Python,Haskell本身,Boo,YAML).我已经看过IndentParser库,看起来它是完美的匹配,但我无法弄清楚如何使我TokenParser成为缩进解析器.这是我到目前为止的代码:

import qualified Text.ParserCombinators.Parsec.Token as T
import qualified Text.ParserCombinators.Parsec.IndentParser.Token as IT

lexer = T.makeTokenParser mylangDef
ident = IT.identifier    lexer
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

parser2.hs:29:28:
    Couldn't match expected type `IT.TokenParser st'
             against inferred type `T.GenTokenParser s u m'
    In the first argument of `IT.identifier', namely `lexer'
    In the expression: IT.identifier lexer
    In the definition of `ident': ident = IT.identifier lexer
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我应该如何创建IT.TokenParser?或者IndentParser是否已被破坏并被避免?

parsing haskell parsec indentation

14
推荐指数
2
解决办法
2411
查看次数

编写编译器; 哪个VM?

我将尝试为动态语言编写编译器.对某些现有的虚拟机最好 - 我还没有(还)想要处理垃圾收集以及一个好的VM为你处理的无数其他问题.您建议使用哪些VM?

我在Linux上,所以我不知道.NET(通过Mono)是不是一个好主意.我听说Parrot对动态语言有好处,但我还没有听说过任何语言用法.我应该发明自己的吗?LLVM是否算作我应该编译的VM,还是像x86一样难?

此外,基于堆栈和基于寄存器的VM有哪些优缺点?

性能和工具支持非常重要.我将在Haskell中编写编译器,因此一个好的接口是一个加号.

compiler-construction

8
推荐指数
2
解决办法
720
查看次数