DSL
いろいろな戦術 †
一言要約 †
外部DSLをパースする方法に、トップダウン型、ボトムアップ型がある。またパーサのイディオムをいくつか知っていることは有用である。
要約 †
- このセクションで取り上げる内容の大部分は、ファウラーが外部DSLで一般的に戦略的な問題として考えたい話題となっている。
- ファウラーはこれらに対して戦略を考える。なぜなら、どうあなた方がDSLをパースするかの大規模な意思決定だから。戦略もまた大量の戦術を決めることである。
- ファウラーによる外部DSLの技術の調査で、さらに手間をかけることに十分に価値があると考える2つの戦術がある。
***パターン参照:NestedExpression? を解決できない*** の種類の演習では、特にあなたがトップダウンのパーサを作成しているときにいくつかの難所(急カーブ)がやってくる。
- しかし実際はNestedExpression?の類はいくつかの困難にぶつかり、トップダウンパーサを使っている場合は特にそうである。
- 文脈自由な言語のためパーサには、次の2つの明白な特色が入っている。
- トップダウン型(多くの場合 LL)
- ボトムアップ型(多くの場合 LR もしくは、 LALR)
- トップダウンのパーサは、特に注目すべき制限がある。それらは、左側に再帰処理が
できないことである。自然に追加ルールを書く方法は、以下の通りである。
しかし、これは左側の再帰である。なぜなら、その項目は左側のルール本体と同じように両端にあるためである。
expr : expr '+' expr;
- ボトムアップ型のパーサは、とても扱いやすい。しかし、トップダウンのパーサは、いくつかの
歪み複雑な言い換えが必要となる。
- これらの
歪み複雑な言い換えは、本当によく知られた熟語のひとつである。しかし、複雑な文法であるため、多くの人達がボトムアップ型のパーサを好む。
- 他の戦術領域は、構文改行(Syntactic Newlines)を扱うことである。
- 改行は、プログラミング言語で、共通的に文の区切りとして利用される。しかし、それらを構文直接変換(Syntax Directed Translation)で利用するには、注意しなくてはいけないいくつかの限界のケースがある。
- ファウラーは、あなた方が文の区切りを使用すべきかどうか、もしくは、あなた方が文の区切りを使用できない場合にどのような形式とすべきかどうか、強い意見は持っていない。
ファウラーへのフィードバック †
担当者のつぶやき †
- 文脈自由とはお絵かきなどの描画を指しているようです。
- But in practice these kinds of *** unable to resolve patternRef: NestedExpression? *** come with some sharp corners, particularly when you have a top-down parser. の訳がうまくできませんでした。どなたかお力添えを・・・orz
- 文中で言われている「contortions」というのは、直訳で歪みですが、いまいちイメージができませんでした。
みんなの突っ込み †
- 「*** 〜 ***」は、おそらく単にページ生成処理にエラってるだけ。NestedExpression?のページにリンクを貼りたかったのかと。なので普通に「しかし実際はNestedExpression?の類はいくつかの困難にぶつかり、トップダウンパーサを使っている場合は特にそうです。」な感じ? -- kakuda?
- イメージとしては「複雑な言い換え(別表現)」。 > contortions -- kakuda?
- kakudaさん、ありがとうごいます。アドバイスいただいた内容を本文に反映しました。 n-sega?