我需要C#3.0(开源许可证)的解析器或语法。今天最好的选择是什么?
答案 0 :(得分:3)
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解析器随时可用。
关于此解析器我最喜欢的事情:
它可以开箱即用加载Visual Studio项目文件(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();
答案 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和许多其他语言中的代码)。
如果您在开源上进行优化,那么这不是您想要的工具。