相关疑难解决方法(0)

解析C#源代码

我正在尝试使用以下代码解析simple.cs源文件:

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
var compileUnit = provider.Parse(File.OpenText(filename));
Run Code Online (Sandbox Code Playgroud)

这给了我一个NotImplementedException:

"此CodeDomProvider不支持此方法"

是不是.NET不提供解析C#代码的实现?或者我只是以错误的方式使用这个类?

编辑:这样做的原因是我想玩一些静态代码分析方法.我的研究不需要编译或执行代码.

c# codedom

8
推荐指数
1
解决办法
4130
查看次数

在ANTLR中编写语言转换器

我正在用相同编程语言的某些方言之间编写一个转换器.我在网上找到了一个语法 - 它很复杂,处理所有情况.现在我正在尝试编写适当的操作.

大多数输入只是被重写为输出.我需要做的是解析函数调用,做我的魔术(重命名函数,重新排序参数等)并编写它.

我正在使用AST作为输出.当我遇到函数调用时,我构建了一个自定义对象结构(从我的目标语言定义的类),调用适当的函数,我有一个字符串,表示我想要获得的转换函数.

问题是,我应该用那个字符串做什么?我想替换封闭规则的.text属性,但setText()仅在词法分析器规则上可用,并且规则的.text属性是只读的.如何解决这个问题呢?

program
    : statement_list            { output = $statement_list.text; }
    ;

//...

statement
    :   expression_statement
    // ...
    ;

expression_statement
    : function_call
    // ...
    ;

function_call
    : ID '('                    { /* build the object, assign name */
                                  Function function = new Function();
                                  //...
                                }
      (
      arg1 = expression         { /* add first parameter */ }
      ( ',' arg2 = expression   { /* add the rest of parameters */ }
      )*
      )?
      ')'                       { /* convert the function …
Run Code Online (Sandbox Code Playgroud)

rewrite antlr

3
推荐指数
1
解决办法
2144
查看次数

标签 统计

antlr ×1

c# ×1

codedom ×1

rewrite ×1