C#的最佳解析器?

C#的最佳解析器?,c#,.net,parsing,C#,.net,Parsing,我需要C#3.0(开源许可证)的解析器或语法。今天最好的选择是什么?查看: Metaspec C#解析器完全可用 符合ECMA-334和ECMA-335 标准。此外,它还支持 特定于Microsoft的扩展。对于 有关C#解析器库的详细信息, 请参阅联机文档(C# 版本或C++版) C#3.0 支持的功能: 新的C#3.0类型推理算法 隐式类型局部变量 对象初始值设定项 集合初始值设定项 匿名对象创建表达式 lambda表达式 匿名类型 扩展方法 查询表达式 部分方法 C#2.0支持的功能:

我需要C#3.0(开源许可证)的解析器或语法。今天最好的选择是什么?

查看:

Metaspec C#解析器完全可用 符合ECMA-334和ECMA-335 标准。此外,它还支持 特定于Microsoft的扩展。对于 有关C#解析器库的详细信息, 请参阅联机文档(C# 版本或C++版) C#3.0 支持的功能:

  • 新的C#3.0类型推理算法
  • 隐式类型局部变量
  • 对象初始值设定项
  • 集合初始值设定项
  • 匿名对象创建表达式
  • lambda表达式
  • 匿名类型
  • 扩展方法
  • 查询表达式
  • 部分方法
C#2.0支持的功能:

  • 仿制药
  • 可空类型
  • 匿名方法

查看ANTLR项目


您可以从这里获得C#语法:

取决于您优化的内容

如果您正在优化转换C#的能力, 有关处理C#1.2、2.0和3.0(包括LINQ语法)的解析器,请参阅。C#前端构建在其之上,提供解析、自动构建AST、支持符号表、使用带模式的源代码级语法进行源代码到源代码的程序转换,以及AST返回到源代码的文本预打印。如果你想转换C代码,这是一个工具。(DMS也用于分析和转换爪哇、C、C++、JavaScript、COBOL和许多其他语言)中的代码。p>
如果你在开源上进行优化,这不是你想要的工具。

我建议你至少看看codeproject.com上的LINQOverC项目

网址:

有一些(次要的?)已知问题,自2008年1月以来就没有更新过(这可能是一个相当大的问题),但是(快速的,100%.Net)C#3.0解析器的源代码是值得考虑的

关于这个解析器,我最喜欢的是:

  • 它可以直接加载VisualStudio项目文件(csproj),并解析整个shebang(包括程序集引用)

  • 您可以使用LINQ查询、枚举、筛选解析的对象模型(树)等。这使得在解析的任何东西上下遍历几乎变得微不足道

  • 下面是一个示例LINQ查询,用于在方法中查找变量或参数,其中变量的名称=VariableName:

    variable = (from v in method.Variables
                                where string.Compare(v.Name, VariableName, false) == 0
                                select v as LanguageElement).Union(
                                  from p in method.FormalParameters
                                  where string.Compare(p.Name, VariableName, false) == 0
                                  select p as LanguageElement).FirstOrDefault();
    

    只是好奇。。你为什么想要一个呢?正在试验代码转换。如果你使用Visual Studio SDK,你可以得到C#project的完整文档对象模型来进行这种转换。VS已经将其用于折射和intellisense,许多加载项也使用它。我不确定-您需要联系Metaspec获取他们的许可证副本。