構文解析ハンズオン 関西出張版
イベント内容
資料について
- http://kmizu.github.io/parser_study_kansai (発表資料)
- https://github.com/kmizu/parser_hands_on_kansai (リポジトリ)
- http://kmizu.github.io/parser_study_kansai/#/16 (一桁整数の構文解析)
- http://kmizu.github.io/parser_study_kansai/#/21 (非負整数の構文解析)
- http://kmizu.github.io/parser_study_kansai/#/26 (単純算術式の構文解析)
- http://kmizu.github.io/parser_study_kansai/#/31 (算術式の構文解析)
- http://kmizu.github.io/parser_study_kansai/#/36 (正規表現の構文解析)
- http://kmizu.github.io/parser_study_kansai/#/41 (JSONの構文解析)
詳しい経緯については、ここから読んでください。
現実的な数の参加者が居そうなので、いよいよ構文解析ハンズオン 関西出張版を開催したいと思います。ハンズオンでは、個々の参加者のJavaに関する知識(Javaを実装言語に使う場合)、構文解析に関する前提知識があるかどうかが重要だと実感したので、登録の際にアンケートに答えていただくことにしました。多少手間をおかけしますが、ご協力お願いいたします。
イベントについて
このイベントは構文解析器(パーザー)を作るためのハンズオン企画(第三回目)です。第一回目、二回目については 以下のURLを参照してください。
- 第一回目: https://lang-impl.connpass.com/event/53867/
- 第二回目: https://lang-impl.connpass.com/event/69373/ a
構文解析といっても、あまり身近に感じられない人もいるかもしれません。しかし、実際には、構文解析(器) は実用プログラムに必要不可欠といっていいものです。
Webサービス間でのデータのやり取りをするための標準的な言語になったJSON、これをプログラムから取り扱うには、 JSONのデータを構文解析して、木構造データとしてプログラムから扱えるように加工する必要があります。CSVを 解析してカンマ区切りの行から各項目を取り出すのも広い意味での構文解析です。Webサービスでの入力について、 特定の規則に従っているかをチェックするのも構文解析です。
既存のよく知られたデータ形式については構文解析器があらかじめ用意されていることが多いですが、 独自のデータ・フォーマットとその構文解析器を書く必要があることもあります。このとき、特に Webサービスでのバリデーションでは、正規表現を使ってアドホックなチェックを行うことが少なく ありませんが、入力が複雑になると正規表現では手に負えないか、とてつもなくメンテナンス性の低い 正規表現を書く羽目になります。
こののハンズオンでは、実際に手を動かしてもらい、構文解析の基礎について学んでいただきます。第一回はPEG、第二回はANTLRを ベースとして開催してみましたが、いきなりツール(ANTLR)を使って学んでもらうのはかなりハードルが高いという結論に達しました。そのため、第一回の、PEGを使った手書き構文解析器の書き方を教えるときに使ったテキストをベースに、様々な修正を加えた感じのテキストで学習してもらう予定です。
これまでもそうでしたが、今回も、実装に使うプログラミング言語はJavaです。実際には、JavaScriptでもRubyでもPythonでもいいのですが、わたしが最も慣れているというのと、ユーザ人口が多い点を考慮してJavaにさせていただきました。
- 整数・小数の構文解析
- 括弧を含む数式の構文解析
- 正規表現の構文解析
- JSONの構文解析
といった題材を通じて、構文解析器の書き方の定石、とりわけ、再帰的な構造を持つ言語を構文解析する 方法について学んでいただくのが狙いです。
参加資格:
- Javaで普通のプログラムが書ける(具体的には以下を参照)
- Javaで、プログラムを複数のクラスに分割することができる
- for,while,switch,throwといった各種制御構造を使うのに不自由しない
- 特に、try-catchを使った例外のハンドリングを普通に書ける
- プログラムを複数のメソッドに分割することができる
- 自分で複雑な構文解析器が書けるようになりたい
- 休日を一日使っても構わない
チューター募集: チューターを上限2名まで募集したいと思います。構文解析器を書くのに慣れている人や、LL法や 再帰下降構文解析といった言葉を聞いてひるまないような人であれば大丈夫です。
チューターに応募された方は、専用のSlack Teamに招待しますので、そこでより詳細な点について 連絡・議論をしたいと思います。基本的には、当日、自分の手が回らない部分に関して、質問に関する 受け答えや、(答えられない場合)私へ質問をフォワードしてもらうのが主な役割になります。特に お礼は用意できないのが心苦しいのですが、その代わり、チューターの方は懇親会に無料で参加できる ようにします。
プログラム
- 10:30 開場
- 11:00~11:10 諸連絡・チューター紹介
- 11:10~12:00 構文解析の基本: @kmizu
- 12:00~13:00 昼食休憩
- 13:00~13:15 数値の構文解析(講義): @kmizu
- 13:15~14:00 数値の構文解析(ハンズオン): @kmizu
- 14:00~14:10 休憩
- 14:10~14:25 単純算術式の構文解析(講義): @kmizu
- 14:25~15:10 単純算術式の構文解析(ハンズオン): @kmizu
- 15:10~15:20 休憩
- 15:20~15:35 算術式の構文解析(講義): @kmizu
- 15:35~16:20 算術式の構文解析(ハンズオン): @kmizu
- 16:20~16:30 休憩
- 16:30~16:45 正規表現の構文解析(講義): @kmizu
- 16:45~17:30 正規表現の構文解析(ハンズオン): @kmizu
- 17:30~17:40 休憩
- 17:40~17:55 JSONの構文解析(講義): @kmizu
- 17:55~18:40 JSONの構文解析(ハンズオン): @kmizu
- 18:40~18:50 クロージング
会場について
会場は、株式会社はてな様のセミナールームです。当日は、住所にあるビルの8Fに来てください。
参加費について
当初、私の交通費と宿泊費+懇親会費のために、一人当たり2000円の予定でしたが、株式会社エフ・コード 様から費用が出ることになったため、懇親会費として一人当たり1000円としました。当日、懇親会参加希望の 方から徴収しますので、懇親会参加される方はおつりが要らないように事前に1000円札を用意しておいてください。
当日までの準備について
当日のハンズオンをスムーズに進めるために、以下のソフトウェアについて事前にインストールをお願いします。Java SE 10
Java SE 10をダウンロード・インストールしておいてください。また、javacにパスを通しておいてください。Java SEは以下のURLからダウンロード可能です。誤って、JREのみをダウンロードされる 方がこれまでも一定数見られましたので、注意してください。 http://www.oracle.com/technetwork/jp/java/javase/downloads/index-jsp-138363.htmlApache Maven
ビルドツールとして、Apache Mavenを使います。各OSのパッケージマネージャからインストールするか、ここからダウンロード及びインストールして、パスを通してください。 できれば、当日までにMavenの基本的な使い方(`mvn compile` や `mvn test` など)は学習しておいて欲しいですが、Mavenに対する深い理解はなくてもかまいません。注意事項
※ 掲載タイミングや更新頻度によっては、情報提供元ページの内容と差異が発生しますので予めご了承ください。
※ 最新情報の確認や参加申込手続き、イベントに関するお問い合わせ等は情報提供元ページにてお願いします。
新規会員登録
このイベントに申し込むには会員登録が必要です。
アカウント登録済みの方はログインしてください。
※ ソーシャルアカウントで登録するとログインが簡単に行えます。
※ 連携したソーシャルアカウントは、会員登録完了後にいつでも変更できます。