【问题标题】:What is the fastest parser generator tool for C# output? [closed]用于 C# 输出的最快解析器生成器工具是什么? [关闭]
【发布时间】:2011-03-11 12:41:37
【问题描述】:

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

【问题讨论】:

  • GOLD 只给你状态表,如果它很慢,那是你的代码,而不是 GOLD。
  • 我正在使用 Morozov C# 引擎生成骨架程序。从 cgt 文件 (136 kb) 读取需要太多时间。

标签: c# .net parser-generator compiler-compiler


【解决方案1】:

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

否则, 您也可以选择SLK Parser Generator(它支持 C、C++、Java、C# 语言)。

也请与此问题保持联系。
它询问如何改进您使用过的 GOLD 解析器:[Improve the GOLD Parser]

【讨论】:

  • 感谢您的建议。我一定会看看这些。
【解决方案2】:

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

ANTLR 是一个 LL(k) 自上而下的解析器。在某些情况下很好,但在其他情况下则不然,因为我们在最左派生上递归处理。像黄金解析器、Visual Parse++ ..etc 这样的解析器是 LR(k) 解析器,它们基本上是自下而上的解析器。根据我对评估不同解析器的研究,我们选择了 LR(k) 解析器(visual parse++ 对我们有好处),它通常在生成解析树的方法上更快。

准确地说,每种解析方法都有其规范,这些规范在不同的情况下工作得好或坏。我们需要评估最适合我们语言的语言。对于您要开发的每种语言,解析器的性能也有两种作用

1) 将方法解析为您正在开发的语言。 2) 使用了解析器生成工具(在某些情况下工具可能开发得不好)

希望对您有所帮助。如果我能提供任何进一步的信息,请告诉我。

V M 拉克什 (rakesh.vm@gmail.com)

【讨论】:

  • 感谢您的宝贵意见。经过一番研究,我选择 Irony 作为我的语言的解析器,它的服务非常好。再次感谢您的宝贵时间。
【解决方案3】:

我不能谈论性能,但你可以试试GPLEX/GPPG

【讨论】:

    【解决方案4】:

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

    JSON.NET

    【讨论】:

    • -1 问题不在于如何反序列化 JSON。
    【解决方案5】:

    为什么不使用内置的 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

    【讨论】:

    • 我正在处理的文本首先不是 JSON 文本。
    • 我的目标是像文本一样解析 JSON 并从中创建 CLR 对象。 那你的意思是什么?因为我不知道如何以不同的方式阅读它,然后尝试将 JSON 转换为 CLR 对象。
    • 很抱歉给您带来了困惑。我的意思是该文本具有类似 JSON 的结构,但不是实际的 JSON 文本。无论如何感谢您的时间。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多