BNF syntax of the interface description language
$accept : %entry% $end
TypeName : IDENT
| WIDGET
Type0 : TYINT
| TYFLOAT
| TYBOOL
| TYCHAR
| TYSTRING
| TypeName
Type1 : Type0
| TypeName LPAREN IDENT RPAREN
| WIDGET LPAREN IDENT RPAREN
| OPTION LPAREN IDENT RPAREN
Type2 : Type1
| Type1 LIST
Type_list : Type2 COMMA Type_list
| Type2
FType : LPAREN RPAREN
| LPAREN Type2 RPAREN
| LPAREN Type_list RPAREN
Type : Type2
| FUNCTION FType
Arg : STRING
| Type
| Template
ArgList : Arg SEMICOLON ArgList
| Arg
Template : LBRACKET ArgList RBRACKET
Constructor : IDENT Template
AbbrevConstructor : Constructor
| IDENT
Constructors : Constructor Constructors
| Constructor
AbbrevConstructors : AbbrevConstructor AbbrevConstructors
| AbbrevConstructor
Safe :
| UNSAFE
Command : Safe FUNCTION FType IDENT Template
External : Safe EXTERNAL IDENT STRING
Option : OPTION IDENT Template
| OPTION IDENT
WidgetComponents :
| Command WidgetComponents
| Option WidgetComponents
| External WidgetComponents
ModuleComponents :
| Command ModuleComponents
| External ModuleComponents
ParserArity :
| SEQUENCE
entry : TYPE ParserArity TypeName LBRACE Constructors RBRACE
| TYPE ParserArity TypeName EXTERNAL
| SUBTYPE ParserArity OPTION LPAREN IDENT RPAREN LBRACE AbbrevConstructors RBRACE
| SUBTYPE ParserArity TypeName LPAREN IDENT RPAREN LBRACE AbbrevConstructors RBRACE
| Command
| WIDGET IDENT LBRACE WidgetComponents RBRACE
| MODULE IDENT LBRACE ModuleComponents RBRACE
| EOF
%entry% : '\001' entry