次: Recursion, 前: Symbols, 上: Grammar File
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を持つ規則には、通常 `/* 空 */'という注釈を書きます。