LoginSignup
3
0

More than 1 year has passed since last update.

Ruby を Julia にトランスパイル する Gem

Last updated at Posted at 2022-03-30

はじめに

RubyJuliaにトランスパイルするgemがあったので遊んでみました。

インストール

gem install julializer

トランスパイル

julializer xxx.rb

# もしくは

bundle exec julializer xxx.rb

トランスパイル結果を標準出力に表示します。

仕組み

require 'ripper'

行頭でripperを呼んでいます。

おお、最近読んだ記事にありました、Ruby プログラムのパーサですね。

失敗

require 'julializer'
puts Julializer.ruby2julia('a = gets.to_i')

デバッグするために、プログラム内でjulializerを呼びます。
トランス対象は、AtCoderでよく使用されるフレーズを使用します。

実行結果
a=trunc(Int64,parse(string(gets)));;
期待する結果
a=parse(Int64,readline());;

現状では失敗するのですが、これはgetsjulializer.rb内で設定されていないからです。

20220330a.png

図の通り、字句解析の結果が配列sに格納され、caseで分岐されますが、ここにgetsreadlineが無いわけです。

成功

julializer.rb
          when :field, :call
            when "gets", "readline"
              case s[3][1]
              when "to_i", "to_int"
                "parse(Int64,readline())"
              end

when "gets", "readline"以下を追記しました。

実行結果
a=parse(Int64,readline());;

ひとまず、欲しい結果が得られました。
いやー、ripperって凄いですね。

まとめ

  • ripper の作者さんありがとう
  • julializer の作者さんありがとう
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0