ruby解析/静态代码分析框架

ruby解析/静态代码分析框架,ruby,parsing,parser-generator,Ruby,Parsing,Parser Generator,我目前正在寻找一个框架,该框架允许我解析ruby代码并将代码转换为 我看了一下,这是我感兴趣的方向,但它给了我一个抽象的语法树 另一种方法是分解一个构建CST的工具(可能是Pelusa或类似的工具) 你有什么建议吗?它应该是用Ruby编写的,所以我不能使用原始的Ruby解析器。我不确定您到底想做什么,但是看看它,它会让您定义一个语法文件,并将语法编译成Ruby解析器。它是一个PEG解析器,因此比传统的LALR解析器更容易使用 下面是一个解析一点Ruby的示例(当然,您必须扩展语法以满足您的需要,

我目前正在寻找一个框架,该框架允许我解析ruby代码并将代码转换为

我看了一下,这是我感兴趣的方向,但它给了我一个抽象的语法树

另一种方法是分解一个构建CST的工具(可能是Pelusa或类似的工具)


你有什么建议吗?它应该是用Ruby编写的,所以我不能使用原始的Ruby解析器。

我不确定您到底想做什么,但是看看它,它会让您定义一个语法文件,并将语法编译成Ruby解析器。它是一个PEG解析器,因此比传统的LALR解析器更容易使用

下面是一个解析一点Ruby的示例(当然,您必须扩展语法以满足您的需要,这可能很困难,因为Ruby解析起来相当复杂):

对此进行分析将返回一个AST:

SyntaxNode+Function0 offset=0, "...ef func\n   6 + 5\nend" (space,function_name,function_body):
  SyntaxNode offset=0, "def"
  SyntaxNode offset=3, " ":
    SyntaxNode offset=3, " "
  SyntaxNode offset=4, "func":
    SyntaxNode offset=4, "f"
    SyntaxNode offset=5, "u"
    SyntaxNode offset=6, "n"
    SyntaxNode offset=7, "c"
  SyntaxNode+FunctionBody0 offset=8, "\n   6 + 5\n" (space1,expression,space2):
    SyntaxNode offset=8, "\n   ":
      SyntaxNode offset=8, "\n"
      SyntaxNode offset=9, " "
      SyntaxNode offset=10, " "
      SyntaxNode offset=11, " "
    SyntaxNode offset=12, "6 + 5"
    SyntaxNode offset=17, "\n":
      SyntaxNode offset=17, "\n"
  SyntaxNode offset=18, "end"
此外,您还可以使用
tt
命令行工具将树顶语法文件编译成Ruby代码

tt test.treetop -o test-treetop.rb

我的问题是,我没有时间和精力为ruby编写语法+语义分析。Rubyparser为Ruby提供了一个良好且有效的语法,因此这已经是第一步了。下一步是进行语义分析。(请参阅)这是RubyParser缺少的部分。我明天会补充问题的细节。谢谢你的帮助。如果以前没有人做过,我也不会感到惊讶。你希望做所有的Ruby(有点像元循环计算器…)吗?不管怎么说,它看起来并不是一个完整的树顶语法:我知道有一些人试图为不同的解析框架实现一个语法,但他们不得不放弃,或者在一定时间后将它交给其他人。相关:你试过探索JRuby吗?它将ruby编译成JVM…这可能就是解决方案。。。我们无论如何都会使用JRuby,但我想让它独立于平台。
tt test.treetop -o test-treetop.rb