Blog

2019.04.09

Engineering

Rust向け字句解析器生成器「rflex」を公開しました

Shuzo Kashihara

Engineer

Rust向け字句解析器生成器である「rflex」をOSSで公開しました。ここでは簡単に、「rflex」や開発に至った経緯について紹介します。

PFNエンジニアの柏原です。あまりリサーチブログには出てきませんが、前回は「[BoF] How to choose programming language for product/in-house software development」というブログを書きました。

「rflex」はプログラミング言語処理系のフロントエンドにおける文字列解析を行うコンポーネントである字句解析器(Lexical analyzer)と構文解析器のうち、前者の字句解析器のコードを生成するツールです。字句解析器生成器の「flex」とよく似たツールとなっています。構文解析器の生成では 「GNU Bison」が有名です。

開発のモチベーション

個人的には「rflex」開発においては社内外での言語処理系開発の盛り上がりについて期待を込めて作っている部分もあります。実務に役立つのはもちろんありがたいことですが、コンパイラ・言語処理系の開発といったプログラミングを楽しむことにも役立ててもらえると開発者として嬉しいと思っています。

PFNでは、業務中の活動として20%に相当する時間を個人の研究テーマや、新規アイディアのプロトタイプ実装などに当てることが認められています(20%ルール)。

今回、私は字句解析器生成器がRust に存在しないことを確認した、2018年7月頃から「rflex」の開発を開始しました。正確には、2018年1月頃から個人的に字句解析器生成器の開発のための学習をしていましたが、せっかくなので制度を活用することにしました。
「rflex」の開発においては既存ライブラリの再実装・移植、つまり車輪の再発明という側面が強いですが、以下の点でメリットがあると考え実装に至りました。

  • Rust向けのツールとして、字句解析器生成器を提供することができる
    • プログラミング言語処理系のフロントエンド開発(Rust)において、字句解析器の作成が楽になる
    • GitHubに公開することでユーザを増やし、バグレポート等の対応により品質の向上が期待できる
    • ブログ執筆時点で社内ユーザは確認できていないが、将来的に社内で必要なテキスト処理・言語処理系フロントエンド開発を手伝える可能性がある
  • Rustを業務時間内に学習できる
  • 字句解析器生成器の仕組みを再実装を通して学習できる
    • 正規表現パーサの実装
    • 非決定性オートマトン(NFA)及び決定性オートマトン(DFA)を構築するコードの実装
    • 決定性オートマトンの最小化アルゴリズムの実装

終わりに

PFNではこのような個人の活動を支援する制度(20%ルール)があり、何かに挑戦したい人にとって嬉しい仕組みだと思います。私自身も「rflex」のユーザとして応用的(言語処理系フロントエンド開発といった)な活動を新たに挑戦していく予定です。これからも「rflex」は継続的に開発を続けていく予定ですので、GitHubでのPull Request/Issueを通してフィードバックをお待ちしています。

最後に宣伝となりますが、今年もPFNはインターンを募集しています。

  • Twitter
  • Facebook