Vin*_*inz 9 parsing scala lexer parser-combinators
我目前正在寻找一个词法分析器/解析器,它从BNF语法(ocamlyacc具有优先级和关联性的文件)生成Scala代码.我很困惑,因为我几乎没有发现如何做到这一点.
对于解析,我发现scala-bison(我有很多麻烦可以使用).所有其他工具都只是导入Scala的Java解析器(如ANTLR).
对于乐兴来说,我一无所获.
我还找到了Scala 的着名解析器组合器,但是(如果我错了,请纠正我),即使它们非常吸引人,它们也会消耗大量的时间和内存,这主要是由于回溯.
所以我有两个主要问题:
作为ScalaBison论文的作者之一,我曾多次遇到过这个问题.:-)我通常在Scala中进行扫描的方法是使用JFlex.它与ScalaBison的效果非常好,我们所有的基准测试都是使用这种组合完成的.不幸的缺点是它确实生成了Java源代码,因此汇编需要一些体操.我相信John Boyland(论文的主要作者)为JFlex开发了Scala输出模式,但我认为它并未公开发布.
对于我自己的开发,我一直在使用无扫描解析技术.Scala 2.8的packrat解析器组合非常好,但仍然没有推广.我已经构建了一个实验库,它在解析器组合框架中实现了通用解析.它的渐近边界比传统的解析器组合更好,但实际上恒定的时间开销更高(我还在努力).