2010-08-30 27 views
0

我正在使用ripper來做mri-1.9中的ruby-code lexing *,我想在JRuby中做同樣的事情,我注意到有這個在org.jruby.parser.DefaultRubyParser中使用org.jruby.lexer.yacc.RubyYaccLexer,我想我可以用它來做mri-1.9。*中的ripper,但是與ripper 。作爲java中的noob,我無法弄清楚如何在jruby中使用它。我不確定它是否可行,希望得到一些建議。如何使用JRuby的org.jruby.lexer.yacc.RubyYaccLexer

回答

1

看看this post from JRuby committer Ola Bini。其中他展示了JRuby AST的一些簡要用法。您可以使用JRuby中的代碼創建AST並在內存中導航它,對其進行處理並將其轉換回可執行代碼。

require 'jruby' 
JRuby.ast_for "puts 'hello'" 
# => RootNode 
# NewlineNode 
#  FCallOneArgNode |puts| 
#  ArrayNode 
#   StrNode =="hello" 

它不會給你像開膛手那樣的類似事件的方法,但通過遍歷AST你可以得到類似的信息。

+0

是的,但JRuby.ast需要有效的ruby語法?有時我需要處理無效的ruby代碼,例如。 ':x => 1',其中我關心的是lexed標記,並且非常希望避免語法檢查。 – ngty 2010-09-02 23:25:22

+0

您也可以查看[jruby-parser](http://kenai.com/projects/jruby-parser/sources/mercurial/show)項目,該項目不需要完整的JRuby安裝。獨立文本的問題在於解析器和詞法分析器是交織在一起的,所以本身可能無法給你所期望的結果。 – 2010-09-06 19:27:16