Next: The Implementation, Previous: Another Example of Flex and Bison, Up: Another Example of Flex and Bison
データベースとのインターフェイス言語は、 英語の非常に小さなサブセットになります。 文法はおおよそ以下のようになります。
command_list ::= sentence {sentence ...} sentence ::= verb_phrase noun_phrase position_phrase adverb period verb_phrase ::= VERB | adverb VERB noun_phrase ::= declared_noun | qualified_noun | noun declared_noun ::= declarator NOUN declarator ::= THIS | THAT | THE | THOSE qualified_noun ::= qualifier NOUN qualifier ::= SOME | MANY | ALL { declarator } NOUN position_phrase ::= position declarator NOUN | empty position ::= IN | ON | AT adverb ::= ADVERB | empty
結果として作成されるプログラムは、 以下のような文章を受け付けます。
FIND MEN QUICKLY FIND MEN FIND ALL MEN ON THE NETWORK QUICKLY FIND ALL MEN ON THE NETWORK FIND ALL MEN ON THE NETWORK QUICKLY
この例では、 BisonとFlexの間のインターフェイスが明確に示されるよう、 文章の簡単な解析結果が表示されます。 このプログラムを試しに実行してみると、 その表示結果は大体以下のようになります。
% front FIND MEN I understand that sentence. VP = FIND NP = MEN PP = AD = QUICKLY FIND ALL THE MEN ON THE NETWORK I understand that sentence. VP = QUICKLY FIND NP = ALL THE MEN PP = ON THE NETWORK AD = ^C %
これは特別便利なものではありません。
というのは、
これは文章の構成要素を表示する以外に何も行わないからです。
しかし、
そこには拡張のためのフックもありますし、
一般的な技法も示されています。
より一般的な形式の文章を受け付けるよう、
この例を拡張してみてください。
ほとんどの場合、
文章は動詞句(VERB
)と名詞句(NOUN
)に分割することができますが、
所有格名詞、
名詞の後ろに名詞が続く場合など、
文章を構成する他の要素も許容されるようにする必要があります。
(‘FIND ALL JONE'S CAT NAMES’のような文章をどうやってパースするかを想像してみてください。)
Bisonの文法やその使い方に関する詳しい説明については、
Bisonのマニュアルを参照してください。