1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
%default-actions quiet
%debug
%union {
int ival;
char cval;
char *strval;
float fval;
}
/* Keywords */
%token DEFINEtkn DEFINE_GROUPtkn
%token LPARAtkn RPARAtkn LBRtkn RBRtkn COLONtkn SEMItkn COMMAtkn
/* Arithmetic operators */
%token EQtkn
%left PLUStkn MINUStkn
%left MULTtkn DIVtkn
%right UNARY
%token <strval> IDtkn
%token <ival> INT_CONSTtkn
%token <fval> FLOAT_CONSTtkn
%token <strval> STRING_CONSTtkn
%token <ival> TRUEtkn FALSEtkn
%%
file: collection ;
collection:
prefix LBRtkn statement_list RBRtkn
| prefix LBRtkn RBRtkn
;
prefix:
IDtkn LPARAtkn param_list RPARAtkn
| IDtkn LPARAtkn RPARAtkn
;
param_list:
param_list COMMAtkn parameter
| parameter
;
parameter:
numeric_constant
| string_or_named_constant
| string_or_named_constant COLONtkn string_or_named_constant
| boolean_constant
;
statement_list:
statement_list statement
| statement
;
statement:
primitive_attribute
| complex_attribute
| definition
| definition_group
| collection
;
definition:
DEFINEtkn LPARAtkn enumerator COMMAtkn enumerator COMMAtkn enumerator RPARAtkn SEMItkn
;
definition_group:
DEFINE_GROUPtkn LPARAtkn enumerator COMMAtkn enumerator RPARAtkn SEMItkn
;
primitive_attribute:
IDtkn COLONtkn primitive_attribute_value
| IDtkn COLONtkn primitive_attribute_value SEMItkn
| IDtkn EQtkn primitive_attribute_value
;
primitive_attribute_value:
expr
;
expr:
expr PLUStkn term
| expr MINUStkn term
| term
;
term:
term MULTtkn primary
| term DIVtkn primary
| primary
;
primary:
LPARAtkn expr RPARAtkn
| MINUStkn expr %prec UNARY
| PLUStkn expr %prec UNARY
| constant
;
constant:
boolean_constant
| numeric_constant
| string_or_named_constant
;
enumerator:
string_or_named_constant
;
string_or_named_constant:
STRING_CONSTtkn
| IDtkn
;
numeric_constant:
INT_CONSTtkn
| FLOAT_CONSTtkn
;
boolean_constant:
TRUEtkn
| FALSEtkn
;
complex_attribute:
prefix SEMItkn
| prefix
;
|