【问题标题】:Text parsing library文本解析库
【发布时间】:2011-02-10 13:50:28
【问题描述】:

我的一位同事致力于基于 C# lambdas 的通用文本解析库。核心看起来很酷,但不幸的是,他硬编码了一个语法,专门用于他的私人任务——数学表达式评估。所以,在我看到 API 之前,我不会像我预期的那样使用它。现在我正在寻找另一个库,它至少满足我的一些要求。它必须:

  1. 能够从外部文件(例如 XML、YML 或 JSON)加载语法。
  2. 从任何文本构建的语法和解析树返回 AST。
  3. 工作速度足够快,可以加载 C# 语法,然后解析大型代码文件。

我更喜欢具有足够简单的语法格式文件的库,以便轻松编写数学表达式的语法,是开源的并用 C# 或 C++ 编写。

问候,

-- 更新:第 2 点已更正。

【问题讨论】:

    标签: parsing syntax abstract-syntax-tree


    【解决方案1】:

    您可以查看Text Transformer,它声称是某种通用文本处理语言。我没有这方面的具体经验。

    构建健壮的语言前端和可用的处理工具实际上是很多工作。 如果您想以通用方式处理计算机语言,您可以考虑我们的DMS Software Reengineering Toolkit,这是一种用于解析、分析、转换和/或生成代码(或任何其他类型的正式文档)的通用编译器技术。

    DMS 将接受语言的任意上下文无关语法,自动构建 AST,无需您进行额外的规范工作,并且设计用于在单次计算中处理大文件和非常大的文件集。一般人 想要处理代码需要模式识别、代码分析和代码转换能力; DMS 内置了所有这些功能。它还具有多种预定义的成熟语法,适用于各种计算机语言,众所周知的(C、C++、C#、COBOL、Java、JavaScript,...)和其他(自然, EGL, Python, MATLAB, ...),并已被用于对这些不同语言的程序进行大规模的自动化分析和转换。

    DMS 不满足您的开源或 C#/C++ 实施要求。它被实现为一组特定领域的语言,用于描述语法、分析器、转换、漂亮打印机和脚本,允许并行执行以使复杂的分析比单线程程序运行得更快。

    【讨论】:

    • 首先,谢谢您的回答!现在让我问你:这些工具包看起来不错,但是可以成为我软件的一部分并允许在运行时加载语法的库呢?我希望能够在不重新编译整个项目的情况下仅替换语法文件来更新我的产品。否则我只会使用 MS Irony(它强制在 C# 中描述语法,而不是在标记的数据文件中)。
    • @noober:构建这些引擎很难。我不知道 TextTransformer 花了多长时间来设计;我知道 DMS 背后有大约一个世纪的工程(我是建筑师)。如果可以将它们组织成某个库,那就太好了,但是每个人都有不同的期望语言来调用该库,因此您最多可以使一组可能的用户满意。 (我从 Ruby 程序员那里得到了 DMS 不是 Ruby 库的抨击。我只是笑)。如果您坚持使用 C++ 或 C# 可调用库,则必须查看其他工具。 ...
    • @noober: ... TextTransformer 可能有一个 C++ 接口。您可能会考虑 ANTLR,我认为它有一个 C++ 版本(不知道关于 C#),但它不会自动为您构建 AST;您可能不在乎,因为 ANTLR 有一个声称的 C# 解析器。您可能会考虑 Stratego,它可以作为 Java 库访问,我认为它也已经有一个声称的 C# 解析器(和 AST 构建器)。 ...
    • @noober: ...但是,恕我直言,您应该考虑的是,一旦获得 AST 并做一些有趣的事情,需要花费多少精力来处理它们。这就是像 DMS(以及较小程度上的 Stratego)这样的工具比“好吧,我的解析可以工作(哇!),现在我需要......”各种解析器不提供的东西的地方。 :符号表管理、属性语法、流分析器、转换机制、AST 到文本的再生……你真的不想自己实现这些。你可以尝试,但一般你不会完成。
    猜你喜欢
    • 2020-05-03
    • 2014-08-11
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2013-07-28
    • 2019-07-05
    相关资源
    最近更新 更多