Parsing 文本分析库

Parsing 文本分析库,parsing,syntax,abstract-syntax-tree,Parsing,Syntax,Abstract Syntax Tree,我的一位同事在基于C#lambdas的通用文本解析库上工作。核心看起来很酷,但不幸的是,对我来说,他硬编码了一个语法,专门用于他的私人任务——数学表达式评估。因此,我不会像看到API之前那样使用它。现在我正在寻找另一个库,它至少满足我的一些要求。它必须: 能够从外部文件(比如XML或JSON)加载语法 从语法返回AST,并从任何文本生成已解析的树 以足够快的速度加载C#语法,然后解析一个大的代码文件 我更喜欢语法格式文件足够简单,便于编写数学表达式文法的库,是开源的,用C或C++编写。 问候,

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

  • 能够从外部文件(比如XML或JSON)加载语法
  • 从语法返回AST,并从任何文本生成已解析的树
  • 以足够快的速度加载C#语法,然后解析一个大的代码文件
  • <>我更喜欢语法格式文件足够简单,便于编写数学表达式文法的库,是开源的,用C或C++编写。 问候,

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

    您可能会检查哪种语言声称是某种通用文本处理语言。我没有这方面的具体经验

    构建健壮的langauge前端和可用的处理工具实际上是一项艰巨的工作。 如果您想以通用的方式处理计算机语言,您可以考虑我们的一种通用编译器技术,用于解析、分析、转换和/或生成代码(或任何其他形式的文档)。 DMS将接受langauges的任意上下文无关语法,自动构建AST,而无需您进行额外的规范工作,并且设计用于在一次计算中不仅处理大文件,而且处理非常大的文件集。正常人 认为要处理代码需要模式识别、代码分析和代码转换能力;DMS内置了所有这些功能。它还具有各种预定义的、成熟的语法,用于各种计算机语言,如C、C++、C语言、COBOL、java、JavaScript……以及其他(自然的、EGL、Python、Matlab……),并已被用于对这些不同语言中的程序进行大规模的自动分析和转换。 DMS不符合您的开源或C#/C++实现要求。它被实现为一组特定于领域的语言,用于描述语法、分析器、转换、预打印程序和脚本,允许并行执行,以使复杂的分析比单线程程序运行得更快。

    您可能会检查哪些语言声称是某种通用文本处理语言。我没有这方面的具体经验

    构建健壮的langauge前端和可用的处理工具实际上是一项艰巨的工作。 如果您想以通用的方式处理计算机语言,您可以考虑我们的一种通用编译器技术,用于解析、分析、转换和/或生成代码(或任何其他形式的文档)。 DMS将接受langauges的任意上下文无关语法,自动构建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语言可调用的库,你就必须看看其他工具……@诺伯:。。。文本转换器可能有C++接口。您可能会考虑ANTLR,我认为它有C++版本(DunNO关于C.*),但它不会自动为您构建AST;您可能不在乎,因为ANTLR有一个声明的C#解析器。您可能会考虑策略,它可以作为java库访问,我认为也有一个要求它的C语法分析器(和AST Builder)。诺伯:。。。但是你应该考虑的是,IMHO,一旦你得到了AST,你需要花多少精力来处理它们,去做一些有趣的事情。这就是像DMS这样的工具(和Stratego在较小程度上)比“好吧,我的解析开始工作了(whew!),现在我需要…”提供了巨大优势的地方。解析器不提供的所有东西:符号表管理、属性语法、流分析器、转换机制、AST到文本再生等等。。。你真的不想自己去实现这些。你可以试试,但一般来说你不会完成。首先,谢谢你的回答!现在让我问你们:这些工具包看起来不错,但那个些可以作为我的软件的一部分并允许在运行时加载语法的库呢?我想要