我可能错了,但到目前为止,C#/.NET 似乎没有直接的 flex/bison (lex/yacc) 端口。
对于 LALR 解析器,我找到了 GPPG/GPLEX,对于 LL 解析器,有著名的 ANTLR。但是,我想尽可能地重用我的 flex/bison 语法。
- C# 有没有直接的 flex/bison 端口?
- 人们通常在 C# 中使用什么词法分析器/解析器?这样的选择有什么理由吗?
我认为你最好的选择是 GPLEX/GPPG,这是我所知道的最接近 C# 的 Yacc/Lex 的东西,无论如何你都需要将你的操作移植到 C# 中。
我还使用过 Coco/R、ANTLR(当然),最近玩过 Irony.net、fslex/fsyacc (F#) 和 fparsec (F#)。
这里有一些链接
我没有使用一个与另一个的技术原因:我玩这些主要是为了好玩。几年前我确实为工作项目创建了一些 DSL,但我在这些上手动滚动了扫描仪/解析器(当时我主要在 Pascal 中工作,我发现 TP Lex/Yacc 不适合我的口味,并且DSL 很简单)。我发现 FParsec 和 Irony 最适合我的口味,因为我发现另一个有点“凌乱”(缺乏优雅)。
看看“Managed babel”扩展,有相当经典的 lex 和 yacc 移植。
http://msdn.microsoft.com/en-us/library/bb165037(VS.80).aspx