- 466 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:51:26 ]
- Lisp系言語の場合、構文のフォーマルな定義がBNFとはちょっと合わない。書けなくはないけれど。
構文の定義はこんな感じのレイヤになってる。 (1)まずtokenに分解 (R6RSの用語ではlexical syntax) (2)S式として読み込み (R6RSの用語ではdatum syntax) (3)S式の中の特定の構造をプログラムの構文として認識 (R6RSの用語ではprogram syntax) このうち、(2)の出力は既に抽象的な木構造のデータなんで、(3)のレベルの構文定義っていうのは 木構造に対する定義になる。もちろん木構造にマッチする文法を書けばいいんだけど。 プログラムの字面に対するBNFとは違ってくるな。 例えば、"(if x y z)" と"(if . (x . (y . (z))))" は字面では違うけどdatum syntaxとして 読まれた後は全く同じ木構造になる。program syntaxはその木構造だけを見る。
|

|