もっとも重要な点

簡易言語で本質を表現すること。簡易言語の設計で善し悪しが決まる。

BNF記法

文脈自由文法の定義につかうメタ言語

結城浩「JAVA言語で学ぶデザインパターン入門」の参照
<program> ::= program <command list>
<command list> ::= <command> * end
<command> ::= <repeat command> | <primitive command>
<repeat command> ::= repeat <number> <command list>
<primitive command> ::= go | right | left

構文木作成

  • BNF記法で記述した構文に基づいて簡易プログラムの文を構文木に分解する。
  • BNFの<hoge>一つが一つのクラス(これを仮に文法クラスと呼ぶ)になって、木構造を作るようにする。
  • この木構造をつくるために、inputとなるプログラム文を入れておくクラスをContext等と呼ぶ。
  • Contextからトークンを取り出し構文木を作って行く行為をパースといい、パーサーという。
  • パーサーは各文法クラスが個々の文法についてパーサーの役目を果たす。これらをまとめてパーサーコンビネータと呼ぶ。
  • Contextに入れるトークンにプログラム文を分割することを字句解析と呼ぶ。1文字1トークンなら字句解析はいらない、また、ライブラリとしてTokenAnalyzerのようなものが用意されていたりする。

雰囲気

  1. Contextにプログラム文を分割したトークン列を入れておく
  2. 構文木の根っことなる文法クラスにパーサを命令、Contextを渡す。
  3. 根っこの文法クラスはContextからトークンを自分の文法にそって必要な分だけ取り出し、文法にそって文法クラス達を作る。そして、それらの文法クラスにパーサを命令し、Contextを渡す。
  4. これが再帰的に行われた結果、構文木が完成する。
最終更新:2012年12月13日 17:19