1/* 2 * -*- tcl -*- 3 * Parsing Expression Grammar 'TEMPLATE'. 4 * Generated for unknown, from file 'TEST' 5 */ 6 7/* 8 * Declaring the parse functions 9 */ 10 11<<attributes>> void <<ns>>sym_AddOp (<<STATE>> <<state>>); 12<<attributes>> void <<ns>>sym_Digit (<<STATE>> <<state>>); 13<<attributes>> void <<ns>>sequence_9 (<<STATE>> <<state>>); 14<<attributes>> void <<ns>>sequence_14 (<<STATE>> <<state>>); 15<<attributes>> void <<ns>>kleene_16 (<<STATE>> <<state>>); 16<<attributes>> void <<ns>>sequence_18 (<<STATE>> <<state>>); 17<<attributes>> void <<ns>>choice_20 (<<STATE>> <<state>>); 18<<attributes>> void <<ns>>sym_Expression (<<STATE>> <<state>>); 19<<attributes>> void <<ns>>sequence_26 (<<STATE>> <<state>>); 20<<attributes>> void <<ns>>kleene_28 (<<STATE>> <<state>>); 21<<attributes>> void <<ns>>sequence_30 (<<STATE>> <<state>>); 22<<attributes>> void <<ns>>sym_Factor (<<STATE>> <<state>>); 23<<attributes>> void <<ns>>sym_MulOp (<<STATE>> <<state>>); 24<<attributes>> void <<ns>>optional_36 (<<STATE>> <<state>>); 25<<attributes>> void <<ns>>poskleene_39 (<<STATE>> <<state>>); 26<<attributes>> void <<ns>>sequence_41 (<<STATE>> <<state>>); 27<<attributes>> void <<ns>>sym_Number (<<STATE>> <<state>>); 28<<attributes>> void <<ns>>sym_Sign (<<STATE>> <<state>>); 29<<attributes>> void <<ns>>sym_Term (<<STATE>> <<state>>); 30 31/* 32 * Precomputed table of strings (symbols, error messages, etc.). 33 */ 34 35static char const* <<string-table>> [21] = { 36 /* 0 = */ "cl '-+'", 37 /* 1 = */ "n AddOp", 38 /* 2 = */ "AddOp", 39 /* 3 = */ "cl '0123456789'", 40 /* 4 = */ "n Digit", 41 /* 5 = */ "Digit", 42 /* 6 = */ "t \50", 43 /* 7 = */ "t \51", 44 /* 8 = */ "n Expression", 45 /* 9 = */ "Expression", 46 /* 10 = */ "n Factor", 47 /* 11 = */ "Factor", 48 /* 12 = */ "cl '*/'", 49 /* 13 = */ "n MulOp", 50 /* 14 = */ "MulOp", 51 /* 15 = */ "n Number", 52 /* 16 = */ "Number", 53 /* 17 = */ "n Sign", 54 /* 18 = */ "Sign", 55 /* 19 = */ "n Term", 56 /* 20 = */ "Term" 57}; 58 59/* 60 * Grammar Start Expression 61 */ 62 63<<attributes>> void <<ns>><<main>> (<<STATE>> <<state>>) { <<prelude>> 64 <<self>> <<ns>>sym_Expression (<<state>>); 65 return; 66} 67 68/* 69 * value Symbol 'AddOp' 70 */ 71 72<<attributes>> void <<ns>>sym_AddOp (<<STATE>> <<state>>) { <<prelude>> 73 /* 74 * [-+] 75 */ 76 77 if (rde_param_i_symbol_start (<<state>>, 2)) return ; 78 rde_param_i_next_class (<<state>>, "-+", 0); 79 rde_param_i_symbol_done_leaf (<<state>>, 2, 1); 80 return; 81} 82 83/* 84 * value Symbol 'Digit' 85 */ 86 87<<attributes>> void <<ns>>sym_Digit (<<STATE>> <<state>>) { <<prelude>> 88 /* 89 * [0123456789] 90 */ 91 92 if (rde_param_i_symbol_start (<<state>>, 5)) return ; 93 rde_param_i_next_class (<<state>>, "0123456789", 3); 94 rde_param_i_symbol_done_leaf (<<state>>, 5, 4); 95 return; 96} 97 98/* 99 * value Symbol 'Expression' 100 */ 101 102<<attributes>> void <<ns>>sym_Expression (<<STATE>> <<state>>) { <<prelude>> 103 /* 104 * / 105 * x 106 * '\(' 107 * (Expression) 108 * '\)' 109 * x 110 * (Factor) 111 * * 112 * x 113 * (MulOp) 114 * (Factor) 115 */ 116 117 if (rde_param_i_symbol_start_d (<<state>>, 9)) return ; 118 <<self>> <<ns>>choice_20 (<<state>>); 119 rde_param_i_symbol_done_d_reduce (<<state>>, 9, 8); 120 return; 121} 122 123<<attributes>> void <<ns>>choice_20 (<<STATE>> <<state>>) { <<prelude>> 124 /* 125 * / 126 * x 127 * '\(' 128 * (Expression) 129 * '\)' 130 * x 131 * (Factor) 132 * * 133 * x 134 * (MulOp) 135 * (Factor) 136 */ 137 138 rde_param_i_state_push_value (<<state>>); 139 <<self>> <<ns>>sequence_9 (<<state>>); 140 if (rde_param_i_bra_value2value(<<state>>)) return; 141 <<self>> <<ns>>sequence_18 (<<state>>); 142 rde_param_i_state_merge_value (<<state>>); 143 return; 144} 145 146<<attributes>> void <<ns>>sequence_9 (<<STATE>> <<state>>) { <<prelude>> 147 /* 148 * x 149 * '\(' 150 * (Expression) 151 * '\)' 152 */ 153 154 rde_param_i_state_push_void (<<state>>); 155 rde_param_i_next_char (<<state>>, "\50", 6); 156 if (rde_param_i_seq_void2value(<<state>>)) return; 157 <<self>> <<ns>>sym_Expression (<<state>>); 158 if (rde_param_i_seq_value2value(<<state>>)) return; 159 rde_param_i_next_char (<<state>>, "\51", 7); 160 rde_param_i_state_merge_value (<<state>>); 161 return; 162} 163 164<<attributes>> void <<ns>>sequence_18 (<<STATE>> <<state>>) { <<prelude>> 165 /* 166 * x 167 * (Factor) 168 * * 169 * x 170 * (MulOp) 171 * (Factor) 172 */ 173 174 rde_param_i_state_push_value (<<state>>); 175 <<self>> <<ns>>sym_Factor (<<state>>); 176 if (rde_param_i_seq_value2value(<<state>>)) return; 177 <<self>> <<ns>>kleene_16 (<<state>>); 178 rde_param_i_state_merge_value (<<state>>); 179 return; 180} 181 182<<attributes>> void <<ns>>kleene_16 (<<STATE>> <<state>>) { <<prelude>> 183 /* 184 * * 185 * x 186 * (MulOp) 187 * (Factor) 188 */ 189 190 while (1) { 191 rde_param_i_state_push_2 (<<state>>); 192 <<self>> <<ns>>sequence_14 (<<state>>); 193 if (rde_param_i_kleene_close(<<state>>)) return; 194 } 195 return; 196} 197 198<<attributes>> void <<ns>>sequence_14 (<<STATE>> <<state>>) { <<prelude>> 199 /* 200 * x 201 * (MulOp) 202 * (Factor) 203 */ 204 205 rde_param_i_state_push_value (<<state>>); 206 <<self>> <<ns>>sym_MulOp (<<state>>); 207 if (rde_param_i_seq_value2value(<<state>>)) return; 208 <<self>> <<ns>>sym_Factor (<<state>>); 209 rde_param_i_state_merge_value (<<state>>); 210 return; 211} 212 213/* 214 * value Symbol 'Factor' 215 */ 216 217<<attributes>> void <<ns>>sym_Factor (<<STATE>> <<state>>) { <<prelude>> 218 /* 219 * x 220 * (Term) 221 * * 222 * x 223 * (AddOp) 224 * (Term) 225 */ 226 227 if (rde_param_i_symbol_start_d (<<state>>, 11)) return ; 228 <<self>> <<ns>>sequence_30 (<<state>>); 229 rde_param_i_symbol_done_d_reduce (<<state>>, 11, 10); 230 return; 231} 232 233<<attributes>> void <<ns>>sequence_30 (<<STATE>> <<state>>) { <<prelude>> 234 /* 235 * x 236 * (Term) 237 * * 238 * x 239 * (AddOp) 240 * (Term) 241 */ 242 243 rde_param_i_state_push_value (<<state>>); 244 <<self>> <<ns>>sym_Term (<<state>>); 245 if (rde_param_i_seq_value2value(<<state>>)) return; 246 <<self>> <<ns>>kleene_28 (<<state>>); 247 rde_param_i_state_merge_value (<<state>>); 248 return; 249} 250 251<<attributes>> void <<ns>>kleene_28 (<<STATE>> <<state>>) { <<prelude>> 252 /* 253 * * 254 * x 255 * (AddOp) 256 * (Term) 257 */ 258 259 while (1) { 260 rde_param_i_state_push_2 (<<state>>); 261 <<self>> <<ns>>sequence_26 (<<state>>); 262 if (rde_param_i_kleene_close(<<state>>)) return; 263 } 264 return; 265} 266 267<<attributes>> void <<ns>>sequence_26 (<<STATE>> <<state>>) { <<prelude>> 268 /* 269 * x 270 * (AddOp) 271 * (Term) 272 */ 273 274 rde_param_i_state_push_value (<<state>>); 275 <<self>> <<ns>>sym_AddOp (<<state>>); 276 if (rde_param_i_seq_value2value(<<state>>)) return; 277 <<self>> <<ns>>sym_Term (<<state>>); 278 rde_param_i_state_merge_value (<<state>>); 279 return; 280} 281 282/* 283 * value Symbol 'MulOp' 284 */ 285 286<<attributes>> void <<ns>>sym_MulOp (<<STATE>> <<state>>) { <<prelude>> 287 /* 288 * [*/] 289 */ 290 291 if (rde_param_i_symbol_start (<<state>>, 14)) return ; 292 rde_param_i_next_class (<<state>>, "*/", 12); 293 rde_param_i_symbol_done_leaf (<<state>>, 14, 13); 294 return; 295} 296 297/* 298 * value Symbol 'Number' 299 */ 300 301<<attributes>> void <<ns>>sym_Number (<<STATE>> <<state>>) { <<prelude>> 302 /* 303 * x 304 * ? 305 * (Sign) 306 * + 307 * (Digit) 308 */ 309 310 if (rde_param_i_symbol_start_d (<<state>>, 16)) return ; 311 <<self>> <<ns>>sequence_41 (<<state>>); 312 rde_param_i_symbol_done_d_reduce (<<state>>, 16, 15); 313 return; 314} 315 316<<attributes>> void <<ns>>sequence_41 (<<STATE>> <<state>>) { <<prelude>> 317 /* 318 * x 319 * ? 320 * (Sign) 321 * + 322 * (Digit) 323 */ 324 325 rde_param_i_state_push_value (<<state>>); 326 <<self>> <<ns>>optional_36 (<<state>>); 327 if (rde_param_i_seq_value2value(<<state>>)) return; 328 <<self>> <<ns>>poskleene_39 (<<state>>); 329 rde_param_i_state_merge_value (<<state>>); 330 return; 331} 332 333<<attributes>> void <<ns>>optional_36 (<<STATE>> <<state>>) { <<prelude>> 334 /* 335 * ? 336 * (Sign) 337 */ 338 339 rde_param_i_state_push_2 (<<state>>); 340 <<self>> <<ns>>sym_Sign (<<state>>); 341 rde_param_i_state_merge_ok (<<state>>); 342 return; 343} 344 345<<attributes>> void <<ns>>poskleene_39 (<<STATE>> <<state>>) { <<prelude>> 346 /* 347 * + 348 * (Digit) 349 */ 350 351 rde_param_i_loc_push (<<state>>); 352 <<self>> <<ns>>sym_Digit (<<state>>); 353 if (rde_param_i_kleene_abort(<<state>>)) return; 354 while (1) { 355 rde_param_i_state_push_2 (<<state>>); 356 <<self>> <<ns>>sym_Digit (<<state>>); 357 if (rde_param_i_kleene_close(<<state>>)) return; 358 } 359 return; 360} 361 362/* 363 * value Symbol 'Sign' 364 */ 365 366<<attributes>> void <<ns>>sym_Sign (<<STATE>> <<state>>) { <<prelude>> 367 /* 368 * [-+] 369 */ 370 371 if (rde_param_i_symbol_start (<<state>>, 18)) return ; 372 rde_param_i_next_class (<<state>>, "-+", 0); 373 rde_param_i_symbol_done_leaf (<<state>>, 18, 17); 374 return; 375} 376 377/* 378 * value Symbol 'Term' 379 */ 380 381<<attributes>> void <<ns>>sym_Term (<<STATE>> <<state>>) { <<prelude>> 382 /* 383 * (Number) 384 */ 385 386 if (rde_param_i_symbol_start_d (<<state>>, 20)) return ; 387 <<self>> <<ns>>sym_Number (<<state>>); 388 rde_param_i_symbol_done_d_reduce (<<state>>, 20, 19); 389 return; 390} 391 392/* 393 */ 394