Dan*_*l O 8 compiler-construction parsing haskell scala parser-combinators
我想知道Scalas/Haskells解析器组合器是否足以解析编程语言.更具体地说,语言MiniJava.我正在阅读compiller构建和jflex和java杯是非常痛苦的工作所以我想知道我是否可以/应该使用解析器组合器.MiniJava语法非常小.MiniJavas BNF:http://www.cambridge.org/us/features/052182060X/grammar.html
eph*_*ent 11
我从未使用过Scala,但是确定的BNF的存在使得这很容易.
简单地翻译成Haskell的Text.ParserCombinators.Parsec:
goal = do c <- mainClass
cs <- many classDeclaration
eof
return $ c:cs
mainClass = do token "class"
name <- identifier
...
Run Code Online (Sandbox Code Playgroud)
等PArrows翻译是相当琐碎了.你可能会发现在解析器之前有一个明显的lexing阶段会更容易,但你也可以不用.
至少Parsec有类似Java语言的内置词法分析器:
lexer = makeTokenParser javaStyle
Run Code Online (Sandbox Code Playgroud)
你必须自己定义保留字.