如何使用IronRuby解析Ruby代码?
我对IronRuby是新手。我正在尝试将其与C#集成 我已经创建了以下示例,它运行良好如何使用IronRuby解析Ruby代码?,ruby,c#-4.0,ironruby,Ruby,C# 4.0,Ironruby,我对IronRuby是新手。我正在尝试将其与C#集成 我已经创建了以下示例,它运行良好 string rubyCode = @" def function_111(test) print 1 end "; ScriptEngine engine = Ruby.CreateEngine();
string rubyCode = @"
def function_111(test)
print 1
end
";
ScriptEngine engine = Ruby.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.Execute(rubyCode, scope);
dynamic sayHelloFun = scope.GetVariable("function_111");
sayHelloFun("test");
若你们看上面的代码,那个么我使用的是编译和执行代码的execute方法,但我只想解析代码,这意味着它的语法是否正确
这怎么可能呢 发布的链接似乎已经死了,搜索引擎缓存副本似乎正在腐烂,因此我将刮去帖子的剩余部分,并在下面对其进行解释
您可以与动态语言运行库(DLR)一起使用来解析Ruby代码。这些步骤是:创建一个Ruby引擎实例,创建一个脚本源和单元,创建一个解析器并解析到,以及使用一个脚本遍历AST 创建引擎 创建源单元 作语法分析 步行 您需要对该类进行子类化,该类有许多虚拟方法来处理对AST中各种节点的访问。中使用的一个看起来是这样的:
public class MyWalker : Walker
{
protected override void Walk(MethodCall node)
{
Console.WriteLine("Method call: " + node.MethodName);
base.Walk(node);
}
protected override void Walk(StringLiteral node)
{
Console.WriteLine("String Literal: " + node.GetMutableString().ToString());
base.Walk(node);
}
}
在上面生成的AST上运行此walker时,将获得以下结果:
Method call: puts
String Literal: hello
我使用并添加了IronRuby 1.1.3 nuget包,并用上面的内容创建了一个应用程序。通过谷歌搜索“IronRuby解析器”发现:它真的对我有帮助。它解决了我的问题。而且,链接已经失效。这就是为什么不鼓励只建立链接。
var parser = new Parser();
var srcTreeUnit = parser.Parse(srcUnit, new RubyCompilerOptions(), ErrorSink.Default);
var walker = new MyWalker();
walker.Walk(srcTreeUnit);
public class MyWalker : Walker
{
protected override void Walk(MethodCall node)
{
Console.WriteLine("Method call: " + node.MethodName);
base.Walk(node);
}
protected override void Walk(StringLiteral node)
{
Console.WriteLine("String Literal: " + node.GetMutableString().ToString());
base.Walk(node);
}
}
Method call: puts
String Literal: hello