C#有(直接)flex / yacc端口吗? 或者lexer / parser用于C#的是什么?

我可能错了,但看起来到目前为止C#/ .NET没有直接的flex / bison(lex / yacc)端口。

对于LALR解析器,我找到了GPPG / GPLEX,对于LL解析器,有着名的ANTLR。 但是,我想尽可能多地重用我的flex / bison语法。

  • 对于C#,有没有直接的flex / bison端口?
  • 人们通常使用什么词法分析器/解析器来进行C#? 这个选择有什么理由吗?

我认为你最好的选择是GPLEX / GPPG,这是我所知道的最接近Yacc / Lex的C#,你需要将你的行动移植到C#中。

我还使用过Coco / R,ANTLR(当然),最近还有Irony.net,f​​slex / fsyacc(F#)和fparsec(F#)。

这是一些链接

Fparsec

椰油/ R

Irony.net

Gardens Point Parser Generator

Gardens Point Lex

我没有技术上的理由使用一个与另一个:我玩这些主要是为了好玩。 很多年前我确实为工作项目创建了一些DSL,但我手动扫描器/解析器(当时我主要在Pascal工作,我发现TP Lex / Yacc不适合我的口味,并且DSL很简单)。 我发现FParsec和Irony最适合我的口味,因为我发现另一个有点“凌乱”(缺乏优雅)。

ANTLR是一个非常成熟(和令人敬畏的)解析器/词法分析器生成器。 它最初生成Java代码,但现在可以定位多种语言, 包括C# 。

看看“Managed babel”扩展,有一个相当经典风格的lex和yacc端口。

http://msdn.microsoft.com/en-us/library/bb165037(VS.80).aspx