プログラミング言語と文法の関係を覗いてみよう 〜自作DSLで追いかける、ソースコードが解釈されるまで〜 by きんじょうひでき

PHPerKaigi 2026
レギュラートーク(40分)

プログラミング言語と文法の関係を覗いてみよう 〜自作DSLで追いかける、ソースコードが解釈されるまで〜

o0h_ きんじょうひでき o0h_
3

コードを書く時に、「文法」って無視できないですよね。
巨大な存在すぎて、「何かそういうもの」「所与のものとして、そう在る」と思ってしまっているフシはありませんか?
しかし、プログラミング言語もソフトウェアです。
私たちが業務や趣味で書いているものと同様に、「仕様があり、それを実装している」に過ぎません。つまり、文法も「仕様に対する実装」と言えるのです。

「最初からある」から「そういうものに見える」のなら、視点を変えるために逆のアプローチを取るのが効くことでしょう。
自分で作るのです!文法を、実装してみましょう。

このトークでは、ドメイン固有言語(DSL)の自作を通じて、「プログラミング言語と文法の関係」に光を当てます。
最後には、文法が「そういうもの」から「仕様と実装があるだけ」と感じられるようになるでしょう。

話すこと

最終的にPHPに変換される、小さなDSLを作成します。
その過程で、「ソースコード(つまり、ただの文字列!)」→「語句に分解された集まり」→「語句同士の連なりである文(構文)」へと変換される手続きと、そこに必要な登場人物を追いかけていきましょう。
字句解析・構文解析といった概念のざっくりとした理解と、文法や言語仕様を読み解くための基礎知識を提供します。

話さないこと

字句解析・構文解析の理論や実装パターンについての網羅的な解説は行いません。「流れを体感する」ことを優先します。
(構文解析器の生成にはパーサージェネレータを利用し、実装における詳細なアルゴリズムは本トークで扱いません。)

代わりに、参考にした書籍等の紹介を発表資料と一緒に展開します。

想定するターゲット

  • 言語やパーサーを自作した経験はないが、興味はある方
  • YAML、SQL、正規表現などを日常的に使っているが、「作る側」の視点を持ったことがない方