C#的最佳解析器?

时间:2009-08-27 02:52:48

标签: c# .net parsing

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

4 个答案:

答案 0 :(得分:3)

结帐Metaspec's C# parser

  

Metaspec C#解析器是完全的   符合ECMA-334和ECMA-335   标准。另外,它支持   特定于Microsoft的扩展。对于   有关C#解析器库的详细信息,   查看在线文档(C#   版或C ++版)。

     

C#3.0   支持的功能:

     
      
  • 新的C#3.0类型推理算法
  •   
  • 隐式输入局部变量
  •   
  • 对象初始化程序
  •   
  • 集合初始值设定项
  •   
  • 匿名对象创建表达式
  •   
  • lambda expressions
  •   
  • 匿名类型
  •   
  • 扩展方法
  •   
  • 查询表达式
  •   
  • 部分方法
  •   
     

C#2.0支持的功能:

     
      
  • 泛型
  •   
  • 可空类型
  •   
  • 匿名方法
  •   

答案 1 :(得分:2)

查看ANTLR项目。 http://www.antlr.org/

你可以从这里获得C#语法:http://www.antlr.org/grammar/list

答案 2 :(得分:1)

我建议至少查看codeproject.com上托管的LINQOverC#项目。

网址:http://www.codeplex.com/LinqOverCSharp

有一些(次要的?)已知问题,自2008年1月以来尚未更新(这可能是一个非常大的问题),但是源代码为a(快速,和100%.Net)C#3.0解析器随时可用。

关于此解析器我最喜欢的事情:

  1. 它可以开箱即用加载Visual Studio项目文件(csproj),并解析整个shebang(包括程序集引用)。

  2. 您可以使用LINQ查询,枚举,过滤等解析的对象模型(树)。无论你正在解析什么,它都会让你几乎无所事事地走来走去。

  3. 这是一个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();
    

答案 3 :(得分:0)

取决于你的优点。

如果您正在优化转换C#的​​能力, 请参阅C# Front End以获取处理C#1.2,2.0和3.0(包括LINQ语法)的解析器。 C#前端构建在DMS Software Reengineering Toolkit之上,它提供了解析,AST的自动构建,对符号表的支持,使用带有模式的源级语法的源到源程序转换,以及AST返回源文本的漂亮打印。如果您希望转换C#代码,这是执行此操作的工具。 (DMS还用于分析和转换Java,C,C ++,JavaScript,COBOL和许多其他语言中的代码)。

如果您在开源上进行优化,那么这不是您想要的工具。