4.1.1.1 利用者が指定するstruct

‘-t’オプション、または同じ働きをする‘%struct-type’宣言が有効な場合、入力ファイルの宣言セクションの最後の要素として、Cのstructを指定する必要があります。このstructの最初のフィールドの型は、‘-P’オプションを指定しない場合はchar *またはconst char *、‘-P’オプション、または同じ働きをする‘%pic’宣言が有効な場合はintでなければなりません。最初のフィールドは‘name’という名前にする必要がありますが、後述の‘-K’オプション、または同じ働きをする‘%define slot-name’宣言を使うと名前を変更できます。

一年の各月とその属性を入力とする簡単な例を示します。

struct month { char *name; int number; int days; int leap_days; };
%%
january,   1, 31, 31
february,  2, 28, 29
march,     3, 31, 31
april,     4, 30, 30
may,       5, 31, 31
june,      6, 30, 30
july,      7, 31, 31
august,    8, 31, 31
september, 9, 30, 30
october,  10, 31, 31
november, 11, 30, 30
december, 12, 31, 31

structの宣言と、キーワードおよびその他のフィールドの一覧を区切るのは、連続する2つのパーセント記号‘%%’です。UNIXユーティリティのlexと同様に、行の最初の列から左詰めで記述します。

structがすでにインクルードファイル内で宣言されている場合は、次のような省略形で示すことができます。

struct month;
%%
january,   1, 31, 31
...