Next: , Previous: Another Example of Flex and Bison, Up: Another Example of Flex and Bison


4.5.1 インターフェイス言語

データベースとのインターフェイス言語は、 英語の非常に小さなサブセットになります。 文法はおおよそ以下のようになります。

     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のマニュアルを参照してください。