PHPからRubyへの変換ツール の高度変換対応に関する研究開発 [ご報告資料] いずもトータルネット株式会社 Copyright© Izumo Total Net All Rights Reserved. contents ご報告内容 1.事業目的 ・・・ 1 ページ 2.事業内容・規模 ・・・ 3 ページ 3.研究開発の内容 ・・・ 4 ページ Copyright© Izumo Total Net All Rights Reserved. 1 事業目的 ① 背景と課題 ◆ 背景 ・プログラミング言語の中で、Rubyのシェアはまだまだ小さい。 ・Ruby経験者が少ない。 ・PHPで開発されたプログラム資産は多く存在する。 ・島根県内の自治体でのシステム開発でRubyでの開発が条件に なっている場合が多々ある。 『PHP⇒Ruby変換ツール』 ◆ これまでの変換ツールの課題 PHPとRubyの構文が1対1で対応している部分に関しては 容易に変換ができるが、そうでない部分の変換には不便。 1 Copyright© Izumo Total Net All Rights Reserved. 1 事業目的 ② 課題の解決 ・1対1変換できない構文が存在する 例:switch文, 変数の初期化 … →文脈を考慮した解析を行い既存の構文の組み合わせで対応 ・型の不適合 例:Rubyでは数値型と文字列型を区別する →型が推測できれば対応可能 ・利用者独自の変換規則に対応できない 例:よく使用するPHP関数等 →トランスレータにユーザーインターフェイスを設ければ 対応可能 ◆ 解決策 『PHP⇒Ruby変換ツール』の高度変換対応 2 Copyright© Izumo Total Net All Rights Reserved. 2 事業内容・規模 ① 研究開発の要素 ◎トランスレータを改良して、一旦PHPの抽象構文木を生成した後、 さらにRubyの中間表現を生成するプロセスを追加します。 構文定義 zend̲language̲parser.y PHP ソースコード 字句解析 構文解析 token̲get̲all (標準関数) パーサ core.y 生成 PHP̲ParserGenerator (PEARライブラリより) PHPの抽象構文木 静的コード解析 トランスレータ Rubyの抽象構文木 ユーザーインターフェイス 機能の追加 変換 ※太線部を開発 Ruby ソースコード 3 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < 概要 > 概 要 項目 1. Ruby中間表現の導入 • より柔軟な変換を可能とするため、変換過程の見直しと内部データ 表現の追加を行う。 2. 静的コード解析 • 詳細にコードを分析することによって変換精度の向上、型(数値、文 字)の曖昧さへの対応を行う。 3. ユーザーインターフェイスの導入 • 変換規則を利用者がカスタマイズできる手段を提供する。 4. コメント文への対応 • プログラムコード以外の要素であり、これまで省略されてきたコメント 文についても表示可能にする。 4 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < Rubyの中間表現の導入 > 1.Rubyの中間表現の導入 • • • 従来のバージョンではPHPの中間表現から直接Rubyのコードを生 成していたため、1対1変換以外の対応は困難であった。 変換段階を1段追加し一旦Rubyの抽象構文木に変換してから改 めてRubyのコードを出力するようにした。 1対1で変換できない部分について、他の形にできる場合、 Ruby の抽象構文木に対して操作を行い対応した。 5 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < Rubyの中間表現の導入 > PHPコード PHPの抽象構文木 Rubyコード Rubyの抽象構文木 6 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < Rubyの中間表現の導入 > 1:N変換の例 初期化位置の移動 メソッドの新規作成 7 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < 静的コード解析 > 2.静的コード解析 PHP解析部の改良 • • • • 型の情報を持てるように中間表現を拡張 変数の定義・参照の追跡・スコープの導入 静的な式の評価を行い、文脈から明らかに数値・文字が混在して いる部分について警告を発するようにした 未定義変数の使用箇所について警告を発するようにした 8 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < 静的コード解析 > PHP中間表現の改良 PHPの抽象構文木 型情報 9 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < 静的コード解析 > 警告の表示 10 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < ユーザーインターフェイスの導入 > 3.ユーザーインターフェイスの導入 • • 変換後のメソッドやクラスに関して名称や引数の順番をカスタマイ ズできるようにした カスタマイズは変換規則をXMLファイルに記述することにより行う Foo($a, $b) → bar(b, c) 11 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < ユーザーインターフェイスの導入 > 変換定義ファイルXML 独自の変換規則を記述 12 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < コメント文への対応 > 4.コメント文への対応 • • • コメントは構文解析とはまったく別のプロセスで処理されるため、従来の バージョンでの対応が困難であった。 字句解析部・構文解析部双方に手を入れることによって、主要なパター ンのコメント文の変換に対応できるようになった。 一部のコメント文(例えば、式と式の間にあるようなコメント)は位置の対 応付けが難しく今後の課題として残った。 13 Copyright© Izumo Total Net All Rights Reserved. 3 研究開発の内容 < コメント文への対応 > 14 Copyright© Izumo Total Net All Rights Reserved. END Copyright© Izumo Total Net All Rights Reserved.
© Copyright 2024 Paperzz