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