-- grammar extracted from xx.mesa by PGS, 17-Jan-83 12:49 ||CHAIN ||LISTS ||TABLE1 1 FCON 2 ICON 3 NAME 4 STRING 5 auto 6 for 7 break 8 case 9 char 10 continue 11 default 12 do 13 double 14 else 15 enum 16 extern 17 float 18 goto 19 if 20 int 21 long 22 register 23 return 24 short 25 sizeof 26 static 27 struct 28 switch 29 typedef 30 union 31 unsigned 32 while 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 eof ||TABLE2 79 goal 80 ExtDefList 81 ExternalDef 82 DataDef 83 OAttributes 84 Attributes 85 FunctionBody 86 CompoundStmt 87 Type 88 StructDcl 89 EnumDcl 90 Optcomma 91 Optsemi 92 DCmpStmt 93 CmpStmt 94 InitDclList 95 FunctionHead 96 ArgDclList 97 NameList 98 Declaration 99 StmtList 100 Stmt 101 Label 102 DclStatList 103 RDclStatList 104 DcltorList 105 Class 106 TypeItem 107 StrHead 108 TypeDclList 109 TypeDcl 110 StrDeclarator 111 Declarator 112 e 113 InitDcltor 114 InitList 115 Initializer 116 EnumHead 117 MOEList 118 MOE 119 Begin 120 ForPrefix 121 EOrEmpty 122 eL1 123 eL2 124 eL3 125 eL4 126 eL5 127 eL6 128 eL7 129 eL8 130 eL9 131 eL10 132 eL11 133 eL12 134 eL13 135 eL14 136 eL15 137 elist 138 CastType 139 NullDeclarator ||TABLE3 STRING tSTRING NAME tNAME ICON tICON ; tSEMICOLON / tDIV "/=" tDIVASG ||TABLE4 1 0 goal ::= ExtDefList 2 1 ExtDefList ::= ExtDefList ExternalDef 3 2 | 4 C 1 ExternalDef ::= DataDef 5 C 1 OAttributes ::= Attributes 6 18 | 7 C 1 FunctionBody ::= CompoundStmt 8 C 1 CompoundStmt ::= DCmpStmt 9 C 1 | CmpStmt 10 C 1 Type ::= StructDcl 11 C 1 | EnumDcl 12 29 | TypeItem 13 30 | TypeItem TypeItem 14 31 | TypeItem TypeItem TypeItem 15 1 Optcomma ::= 16 1 | , 17 1 Optsemi ::= 18 1 | ; 19 3 DataDef ::= OAttributes InitDclList ; 20 4 | FunctionHead FunctionBody 21 5 FunctionHead ::= OAttributes NAME ( ) ArgDclList 22 6 | OAttributes NAME ( NameList ) ArgDclList 23 7 | OAttributes * NAME ( ) ArgDclList 24 8 | OAttributes * NAME ( NameList ) ArgDclList 25 9 NameList ::= NAME 26 10 | NameList , NAME 27 11 ArgDclList ::= 28 12 | ArgDclList Declaration 29 13 StmtList ::= 30 14 | StmtList Stmt 31 14 | StmtList Label 32 15 DclStatList ::= 33 16 | DclStatList Attributes InitDclList ; 34 16 RDclStatList ::= DclStatList Attributes InitDclList ; 35 17 Declaration ::= Attributes DcltorList ; 36 19 Attributes ::= Class Type 37 20 | Type Class 38 21 | Class 39 C 22 | Type 40 23 | Type Class Type 41 24 Class ::= auto 42 25 | static 43 26 | extern 44 27 | register 45 28 | typedef 46 32 TypeItem ::= char 47 33 | short 48 34 | int 49 35 | long 50 36 | unsigned 51 37 | float 52 38 | double 53 39 StructDcl ::= StrHead { TypeDclList Optsemi } 54 40 | struct NAME 55 41 | union NAME 56 42 StrHead ::= struct 57 43 | union 58 44 | struct NAME 59 45 | union NAME 60 46 TypeDclList ::= TypeDcl 61 47 | TypeDclList ; TypeDcl 62 48 TypeDcl ::= Type DcltorList 63 49 DcltorList ::= StrDeclarator 64 50 | DcltorList , StrDeclarator 65 51 StrDeclarator ::= Declarator 66 52 | Declarator : e 67 53 | : e 68 54 Declarator ::= * Declarator 69 55 | Declarator ( ) 70 56 | Declarator [ ] 71 57 | Declarator [ e ] 72 58 | NAME 73 59 | ( Declarator ) 74 60 InitDclList ::= InitDcltor 75 61 | InitDclList , InitDcltor 76 62 InitDcltor ::= Declarator 77 63 | Declarator = e 78 64 | Declarator = { InitList Optcomma } 79 65 InitList ::= Initializer 80 66 | InitList , Initializer 81 67 Initializer ::= e 82 68 | { InitList Optcomma } 83 69 EnumDcl ::= EnumHead { MOEList Optcomma } 84 70 | enum NAME 85 71 EnumHead ::= enum 86 72 | enum NAME 87 73 MOEList ::= MOE 88 74 | MOEList , MOE 89 75 MOE ::= NAME 90 76 | NAME = e 91 77 DCmpStmt ::= Begin RDclStatList StmtList } 92 78 CmpStmt ::= Begin StmtList } 93 79 Begin ::= { 94 80 Stmt ::= e ; 95 81 | CompoundStmt 96 82 | if ( e ) Stmt 97 83 | if ( e ) Stmt else Stmt 98 84 | while ( e ) Stmt 99 85 | do Stmt while ( e ) ; 100 87 | ForPrefix EOrEmpty ) Stmt 101 88 | switch ( e ) Stmt 102 89 | break ; 103 90 | continue ; 104 91 | return ; 105 92 | return e ; 106 93 | goto NAME ; 107 94 | ; 108 86 ForPrefix ::= for ( EOrEmpty ; EOrEmpty ; 109 95 Label ::= NAME : 110 96 | case e : 111 97 | default : 112 98 eL1 ::= eL2 113 104 | eL2 "*=" eL1 114 105 | eL2 "/=" eL1 115 106 | eL2 "%=" eL1 116 107 | eL2 "+=" eL1 117 108 | eL2 "-=" eL1 118 109 | eL2 "<<=" eL1 119 110 | eL2 ">>=" eL1 120 111 | eL2 "&=" eL1 121 112 | eL2 "|=" eL1 122 113 | eL2 "^=" eL1 123 114 | eL2 = eL1 124 C 98 eL2 ::= eL3 125 115 | eL3 '? eL3 : eL2 126 98 eL3 ::= eL4 127 116 | eL3 "||" eL4 128 C 98 eL4 ::= eL5 129 117 | eL4 "&&" eL5 130 98 eL5 ::= eL6 131 118 | eL5 '| eL6 132 C 98 eL6 ::= eL7 133 119 | eL6 ^ eL7 134 98 eL7 ::= eL8 135 120 | eL7 & eL8 136 C 98 eL8 ::= eL9 137 121 | eL8 "==" eL9 138 122 | eL8 "!=" eL9 139 98 eL9 ::= eL10 140 123 | eL9 < eL10 141 124 | eL9 > eL10 142 125 | eL9 "<=" eL10 143 126 | eL9 ">=" eL10 144 C 98 eL10 ::= eL11 145 127 | eL10 "<<" eL11 146 128 | eL10 ">>" eL11 147 98 eL11 ::= eL12 148 129 | eL11 + eL12 149 130 | eL11 - eL12 150 C 98 eL12 ::= eL13 151 131 | eL12 * eL13 152 132 | eL12 / eL13 153 133 | eL12 % eL13 154 98 eL13 ::= eL14 155 134 | "++" eL13 156 135 | "!!" eL13 157 136 | * eL13 158 137 | & eL13 159 138 | - eL13 160 139 | ! eL13 161 140 | ~ eL13 162 141 | sizeof eL13 163 142 | ( CastType ) eL13 164 143 | sizeof ( CastType ) 165 C 98 eL14 ::= eL15 166 144 | eL14 "++" 167 145 | eL14 "!!" 168 99 EOrEmpty ::= 169 100 | e 170 101 elist ::= e 171 102 | elist , e 172 C 103 e ::= eL1 173 146 eL15 ::= eL15 [ e ] 174 147 | NAME ( ) 175 148 | NAME ( elist ) 176 149 | NAME 177 150 | ICON 178 151 | FCON 179 152 | STRING 180 153 | ( e ) 181 154 | eL15 "->" NAME 182 155 | eL15 . NAME 183 156 CastType ::= Type NullDeclarator 184 157 NullDeclarator ::= * NullDeclarator 185 158 | ( NullDeclarator ) ( ) 186 159 | NullDeclarator [ ] 187 160 | NullDeclarator [ e ] 188 161 | ( ) 189 162 | 190 163 | ( NullDeclarator )