6

我正在寻找一个解析器生成器工具,它可以提供 C# 输出并且相当快。我的目标是像文本一样解析 JSON 并从中创建 CLR 对象。我为此使用了 GOLD Parser 引擎,但结果证明它对我的需要来说很慢。任何人都可以向我推荐一个可以发出 C# 代码的好且快速的解析器生成器工具吗?我听说过 Irony 和 ANTLR,但没有使用过它们的经验。它们生成的解析器速度快得多还是有更好的选择?

4

5 回答 5

6

我认为您应该考虑使用GPLEX Scanner Generator。这是在不需要回溯且没有锚定模式的词汇规范的情况下使用的最快的一种。

否则,您也可以使用SLK 解析器生成器(它支持 C、C++、Java、C# 语言)。

也与这个问题保持联系。
它询问如何改进您使用的 GOLD 解析器:[改进 GOLD 解析器]

于 2011-03-11T12:53:02.593 回答
2

ANTLR 是一种 LL 解析器,在语言接受度方面不如 LR 解析器强大。请验证您在所有可能情况下的上下文语言是否符合 LL 规范。还有一些其他的事情需要考虑,比如模棱两可的语法、上下文无关或上下文敏感的语法等等......最好先用不同的解析器类型评估你的需求(LL(+)、LR(+)、CALR(+)、 LALR(+) ) 可用。+ 表示发生 1 次或多次前瞻。之后选择该解析器类型的一个解析器生成工具。

ANTLR is a LL(k) top-down parser.. good in some cases but not in others as we process recursively on left most derivation. Parsers like gold parser, Visual Parse++ ..etc are LR(k) parsers which are basically bottom-up parsers. with my research on evaluating different parsers we selected LR(k) parser (visual parse++ was good for us) which in general are faster in approach of generating parse tree.

to precise every parsing methodology has its specifications which work good or bad in different cases. We need to evaluate the best one for our language. Also performance of a parser works in two fold for every language you want to develop

1) parsing methodology wrt to the language you are developing. 2) parser generating tool used (tool might not be developed great in some cases)

hope it helps. let me know if i can help with any further information.

V M Rakesh (rakesh.vm@gmail.com)

于 2011-04-26T18:16:34.510 回答
1

我无法谈论性能,但您可以尝试GPLEX/GPPG

于 2011-03-11T12:55:51.377 回答
0

最新版本的 JSON.NET 能够直接从 JSON 创建动态 CLR 对象。那是没有办法了吗?当然,静态类型的反序列化也是可能的。

JSON.NET

于 2011-03-11T12:58:49.473 回答
0

为什么不使用 JavaScriptSerializer 类中的构建来反序列化 JSON?

通用反序列化方法:http: //msdn.microsoft.com/en-us/library/bb355316.aspx

JavascriptSerializer 类:http: //msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

于 2011-03-11T13:15:12.003 回答