Next: , Previous: Symbols, Up: Grammar File


3.3 文法規則の構文

Bison文法規則は、一般的に次の書式です。

     result: components...
             ;

resultは、この規則が記述する非終端記号で、 componentsは、この規則で一緒に置かれるさまざまな 終端および非終端記号です。 例を示します。

     exp:      exp '+' exp
             ;

この例では、‘+’トークンを間にはさんで 型expの2つのグループ化が行われ、 型expのより大きなグループができます。

規則の中の空白1は、 記号を分けるだけの意味を持ちます。 必要に応じて、余分な空白を書いてもかまいません。

componentsの周辺にあるものは、 規則の意味を決定するアクション(action)になることができます。 アクションは、次のようになります。

     {C statements}

通常、1つだけのアクションと、それに続くcomponentsがあります。 See Actions

同一のresultに対する複数の規則は、 別々に書くこともできますし、 次の例のように縦線記号‘|’で区切ってまとめて書くことも可能です。

まとめて書いても、それぞれの規則は別々のものとみなされます。

もし、規則中のcomponentsが空ならば、 resultが空の列にマッチできることを意味します。 例として、カンマで区切られた0個以上のexpのグループを 定義する方法を示します。

     expseq:   /* 空 */
             | expseq1
             ;
     
     expseq1:  exp
             | expseq1 ',' exp
             ;

空のcomponentを持つ規則には、通常 ‘/* 空 */’という注釈を書きます。


Footnotes

[1] 【訳注】任意の数の空白文字、タブ符号、改行符号。