Czy można pobrać blok AST od samego Rubiego?Wyodrębnij AST z bloku Ruby
Spojrzałem na ParseTree i ruby_parser, ale oba wydają się mieć szkicową obsługę (z tego, co przeczytałem) dla Ruby 1.9.2. Potrzebuję czegoś, co działa dobrze z wersją 1.9.2.
Czy można pobrać blok AST od samego Rubiego?Wyodrębnij AST z bloku Ruby
Spojrzałem na ParseTree i ruby_parser, ale oba wydają się mieć szkicową obsługę (z tego, co przeczytałem) dla Ruby 1.9.2. Potrzebuję czegoś, co działa dobrze z wersją 1.9.2.
Ripper jest zawarty w MRI 1.9 po wyjęciu z pudełka.
ruby-1.9.2-p180 :004 > require 'ripper'
=> true
ruby-1.9.2-p180 :005 > Ripper.sexp("def a; end")
=> [:program, [[:def, [:@ident, "a", [1, 4]], [:params, nil, nil, nil, nil, nil], [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
w 1,8, Ruby wykonuje kod przez przejeżdżające AST, więc jest to możliwe, aby uzyskać AST dla danej metody/bloku. W 1.9 tak nie jest; kod jest najpierw analizowany, następnie konwertowany na kod bajtowy YARV, a następnie wykonywany. Nie źródło, ani AST nie jest trzymane po etapie tłumaczenia, a drugie nie jest odwracalne; w związku z tym nie można uzyskać AST za blok w 1.9.
Jak używać Rippera do pobrania AST z bloku? Zakładam, że w jakiś sposób będę musiał pobrać kod źródłowy bloku. –
Dzięki za informacje! Wygląda na to, że musisz "wymagać" rippera ", aby działał. –
Oh. Przepraszam, powinienem uważniej przeczytać Twój wpis. Zaktualizowałem odpowiedź. – whitequark