我正在尝试使用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是否已被破坏并被避免?
我将尝试为动态语言编写编译器.对某些现有的虚拟机最好 - 我还没有(还)想要处理垃圾收集以及一个好的VM为你处理的无数其他问题.您建议使用哪些VM?
我在Linux上,所以我不知道.NET(通过Mono)是不是一个好主意.我听说Parrot对动态语言有好处,但我还没有听说过任何语言用法.我应该发明自己的吗?LLVM是否算作我应该编译的VM,还是像x86一样难?
此外,基于堆栈和基于寄存器的VM有哪些优缺点?
性能和工具支持非常重要.我将在Haskell中编写编译器,因此一个好的接口是一个加号.