Rubyライクな言語(7)Ripperライブラリを追加した|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。Rubyライクな言語(7)Ripperライブラリを追加したhachi8833シェアツイートブックマークLINEこんにちは、hachi8833です。今年もアドベントカレンダーの季節がやってまいりました。間が空いてしまいましたが、Goby記事です。https://goby-lang.org/Ripperクラス2018年9月に、GobyにRipperライブラリを追加しました。Rubyのライブラリと同じ名前で恐縮です。goby-lang/gobyRubyのRipperはクラスメソッドとインスタンスメソッドを両方備えていますが、Gobyのは今のところクラスメソッドのみです。'ripper'して使う点はGobyも同じです。RubyのRipperRubyのRipperは、Rubyの標準ライブラリに含まれているパーサーです。Rubyの構文解析を追ったり静的解析を行ったりするときに使われます。Rubocopではある時期からRipperを使わなくなったそうです(関連記事)。EXPR_END>]]GobyのRipperGobyのRipperは、今のところ以下のクラスメソッドのみです。:ripperのようにシンボル形式でも書けます?。]今のところは、だいぶあっさりした出力です。importは以下のようになっています。"strings")一見してわかるように、Gobyに備わっているコンパイラを直接importして使っています。基本的にGobyのRipperは、コンパイラのparserやlexerやtokenなどの結果を正直に吐き出しているだけです。私でもどうにか作れました。当初のRipperは、StringやIntegerなどと同じネイティブクラスとして作り始めたのですが、常駐させることもないと思い、ローダブルなライブラリに変更して必要なものを以下のように読み込んでいます。:ripperするまでアクティベートされません。vm.ArrayObjectGobyのローダブルライブラリのGoコードは、以下のようにinitでクラスメソッドとインスタンスメソッドを登録しておきます。))}ただしGobyのローダブルライブラリでは、上の他にダミーのRipperクラスをripper.gbというファイルとして用意しておく必要があります。requireすると、上のinitでripper.gbとripper.goがバインドされます。RipperendRipperの中身tokenize、parse、lex、instructionメソッドは作りとして大差はないので、tokenizeメソッドを例に取ります。t.VM().InitArrayObject(el)}lexer.Newのようにコンパイラ配下のパッケージで.Newし、文字列を食わせた結果をarrayとして返しているだけです。instructionは、階層が2つに固定されているのを利用してArrayやHashに変換しています。実はマージ後しばらくしてRipper.instructionの動作がおかしくなっていました。この間それを思い出してやっと直しました?(#804)。最近のGoby今、GobyにもRubyのような文字列の式展開機能を付けたいと思ってゴニョゴニョ調べています。現在のGobyの構文解析はシンプルなのですが、式展開をやるにはlexerやparserやASTをそこそこ大掛かりに変えないといけなさそうで悩んでます。趣味なのでちびちび進めるつもりです?。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。