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を持つ規則には、通常 ‘/* 空 */’という注釈を書きます。