1
6
也许值得一看
ANTLR
parser generator
.
在antlr站点上,您可以找到您感兴趣的所有3种语言的语法(尽管ruby语法仅适用于语言的“简化”版本)。
下一个困难可能是将这些语法改编成特定的
目标语言
您希望,也就是说,生成解析器本身的语言。
总的来说, antlr代表了一点设置/学习曲线的努力 ,但是由于您需要处理3种语言,这可能是值得的投资,因为这将允许您拥有一个统一的框架(在这个框架上您拥有“完全”控制权),而不是像您开始做的那样试图将三个可能非常不同的、可能更多的“锁定”解析器组合起来。
所有这三种语言都是相对复杂的语言,尽管您的目标是“仅仅”识别程序中的方法,但是您可能能够破解/简化一些语法(或者可能只是“忽略”其中的一部分),只将少数感兴趣的解析器级规则映射到最终的goa。L。
最后建议:
又一个建议!
|
2
6
对于python,情况很简单:有一个 Python parser 在标准库中以及 a more high-level module for manipulating ASTs .
另外,python有一个简单的语法(至少当你使用这个技巧在你的lexer中保留一个缩进堆栈并注入fake
对于ruby,有相当多的解析器可用。
露比是
难以置信地
很难解析,所以如果需要完全保真度,就必须使用yarv ruby实现中的原始yacc语法文件。(
当然,地球上几乎每种语言都有yacc克隆。但是,请注意,yarv不使用
xruby编译器是唯一不使用yarv的完整ruby实现。
RedParse 是一个用ruby编写的ruby解析器,它声称能够正确地解析所有ruby语法。例如,在 YARD ruby文档工具,其中包括提取方法名。
ruby_parser
是ruby中的另一个ruby解析器。它是由
yarv实际上包含一个名为
然而,出于您的目的,实际上并不需要一个成熟的ruby解析器。你只需要提取方法名和其他一些东西。 RDoc ruby文档生成器包含一个ruby解析器,它可以解析足够的ruby来提取方法名和其他一些东西。 Cardinal 是 Parrot Virtual Machine . 它还没有运行所有的ruby,但是 its parser 应该足够强大来支持你所需要的一切。(解析器是在parrot语法引擎中编写的,因此您显然必须在parrot中运行它,例如在perl6中编写报告工具)。
tinyrb
是另一个不运行完整ruby但包含
better written parser
比亚尔。在这种情况下,解析器使用
Ian Piumarta's
|
3
2
对于ruby和python,您不能简单地对类进行内省来学习方法的名称吗?您必须在每种语言中编写相同的功能,但(至少在python中)几乎没有任何功能。 |
4
1
这个 DMS Software Reengineering Toolkit 有完整的、健壮的c和python解析器,可以自动构建完整的ast。DMS为您提供了在树上行走和收集您可能希望收集的任何数据的设施。 另一张海报的答案表明ruby很难解析。C++也很难解析。DMS已经被用于解析30种其他语言,包括多个方言中的完全C++,因此露比似乎非常可行。然而,DMS没有现成的Ruby解析器。 |
batman · 如何用特定模式grep特定行及其子网行? 2 年前 |
Jensen Holm · 在非常大的字符串中查找链接时遇到问题 2 年前 |
MBF · PHP导入/解析XML文件内容保存到数据库 2 年前 |
user10717742 · 用java编写的自定义文件解析器需要改进 2 年前 |
Muhsin Muhammed · 向文件中的行添加引号和逗号 2 年前 |
Felkru · 添加字符串会在Javascript中返回空字符串 2 年前 |
Mustard Tiger · 熊猫解析文本列 2 年前 |