1## -*- tcl -*- 2## 3## Snit-based Tcl/PARAM implementation of the parsing 4## expression grammar 5## 6## TEMPLATE 7## 8## Generated from file TEST 9## for user unknown 10## 11# # ## ### ##### ######## ############# ##################### 12## Requirements 13 14package require Tcl 8.5 15package require snit 16package require pt::rde ; # Implementation of the PARAM 17 # virtual machine underlying the 18 # Tcl/PARAM code used below. 19 20# # ## ### ##### ######## ############# ##################### 21## 22 23snit::type ::PARSER { 24 # # ## ### ##### ######## ############# 25 ## Public API 26 27 constructor {} { 28 # Create the runtime supporting the parsing process. 29 set myparser [pt::rde ${selfns}::ENGINE] 30 return 31 } 32 33 method parse {channel} { 34 $myparser reset $channel 35 MAIN ; # Entrypoint for the generated code. 36 return [$myparser complete] 37 } 38 39 method parset {text} { 40 $myparser reset 41 $myparser data $text 42 MAIN ; # Entrypoint for the generated code. 43 return [$myparser complete] 44 } 45 46 # # ## ### ###### ######## ############# 47 ## Configuration 48 49 pragma -hastypeinfo 0 50 pragma -hastypemethods 0 51 pragma -hasinfo 0 52 pragma -simpledispatch 1 53 54 # # ## ### ###### ######## ############# 55 ## Data structures. 56 57 variable myparser {} ; # Our instantiation of the PARAM. 58 59 # # ## ### ###### ######## ############# 60 ## BEGIN of GENERATED CODE. DO NOT EDIT. 61 62 # 63 # Grammar Start Expression 64 # 65 66 proc MAIN {} { upvar 1 myparser myparser 67 sym_Expression 68 return 69 } 70 71 # 72 # value Symbol 'AddOp' 73 # 74 75 proc sym_AddOp {} { upvar 1 myparser myparser 76 # [-+] 77 78 $myparser si:void_symbol_start AddOp 79 $myparser si:next_class -+ 80 $myparser si:void_leaf_symbol_end AddOp 81 return 82 } 83 84 # 85 # value Symbol 'Digit' 86 # 87 88 proc sym_Digit {} { upvar 1 myparser myparser 89 # [0123456789] 90 91 $myparser si:void_symbol_start Digit 92 $myparser si:next_class 0123456789 93 $myparser si:void_leaf_symbol_end Digit 94 return 95 } 96 97 # 98 # value Symbol 'Expression' 99 # 100 101 proc sym_Expression {} { upvar 1 myparser myparser 102 # / 103 # (Function) 104 # x 105 # '\(' 106 # (Expression) 107 # '\)' 108 # x 109 # (Factor) 110 # * 111 # x 112 # (MulOp) 113 # (Factor) 114 115 $myparser si:value_symbol_start Expression 116 choice_21 117 $myparser si:reduce_symbol_end Expression 118 return 119 } 120 121 proc choice_21 {} { upvar 1 myparser myparser 122 # / 123 # (Function) 124 # x 125 # '\(' 126 # (Expression) 127 # '\)' 128 # x 129 # (Factor) 130 # * 131 # x 132 # (MulOp) 133 # (Factor) 134 135 $myparser si:value_state_push 136 sym_Function 137 $myparser si:valuevalue_branch 138 sequence_10 139 $myparser si:valuevalue_branch 140 sequence_19 141 $myparser si:value_state_merge 142 return 143 } 144 145 proc sequence_10 {} { upvar 1 myparser myparser 146 # x 147 # '\(' 148 # (Expression) 149 # '\)' 150 151 $myparser si:void_state_push 152 $myparser si:next_char \50 153 $myparser si:voidvalue_part 154 sym_Expression 155 $myparser si:valuevalue_part 156 $myparser si:next_char \51 157 $myparser si:value_state_merge 158 return 159 } 160 161 proc sequence_19 {} { upvar 1 myparser myparser 162 # x 163 # (Factor) 164 # * 165 # x 166 # (MulOp) 167 # (Factor) 168 169 $myparser si:value_state_push 170 sym_Factor 171 $myparser si:valuevalue_part 172 kleene_17 173 $myparser si:value_state_merge 174 return 175 } 176 177 proc kleene_17 {} { upvar 1 myparser myparser 178 # * 179 # x 180 # (MulOp) 181 # (Factor) 182 183 while {1} { 184 $myparser si:void2_state_push 185 sequence_15 186 $myparser si:kleene_close 187 } 188 return 189 } 190 191 proc sequence_15 {} { upvar 1 myparser myparser 192 # x 193 # (MulOp) 194 # (Factor) 195 196 $myparser si:value_state_push 197 sym_MulOp 198 $myparser si:valuevalue_part 199 sym_Factor 200 $myparser si:value_state_merge 201 return 202 } 203 204 # 205 # value Symbol 'Factor' 206 # 207 208 proc sym_Factor {} { upvar 1 myparser myparser 209 # x 210 # (Term) 211 # * 212 # x 213 # (AddOp) 214 # (Term) 215 216 $myparser si:value_symbol_start Factor 217 sequence_31 218 $myparser si:reduce_symbol_end Factor 219 return 220 } 221 222 proc sequence_31 {} { upvar 1 myparser myparser 223 # x 224 # (Term) 225 # * 226 # x 227 # (AddOp) 228 # (Term) 229 230 $myparser si:value_state_push 231 sym_Term 232 $myparser si:valuevalue_part 233 kleene_29 234 $myparser si:value_state_merge 235 return 236 } 237 238 proc kleene_29 {} { upvar 1 myparser myparser 239 # * 240 # x 241 # (AddOp) 242 # (Term) 243 244 while {1} { 245 $myparser si:void2_state_push 246 sequence_27 247 $myparser si:kleene_close 248 } 249 return 250 } 251 252 proc sequence_27 {} { upvar 1 myparser myparser 253 # x 254 # (AddOp) 255 # (Term) 256 257 $myparser si:value_state_push 258 sym_AddOp 259 $myparser si:valuevalue_part 260 sym_Term 261 $myparser si:value_state_merge 262 return 263 } 264 265 # 266 # value Symbol 'Function' 267 # 268 269 proc sym_Function {} { upvar 1 myparser myparser 270 # (Sinus) 271 272 $myparser si:value_symbol_start Function 273 sym_Sinus 274 $myparser si:reduce_symbol_end Function 275 return 276 } 277 278 # 279 # value Symbol 'MulOp' 280 # 281 282 proc sym_MulOp {} { upvar 1 myparser myparser 283 # [*/] 284 285 $myparser si:void_symbol_start MulOp 286 $myparser si:next_class */ 287 $myparser si:void_leaf_symbol_end MulOp 288 return 289 } 290 291 # 292 # value Symbol 'Number' 293 # 294 295 proc sym_Number {} { upvar 1 myparser myparser 296 # x 297 # ? 298 # (Sign) 299 # + 300 # (Digit) 301 302 $myparser si:value_symbol_start Number 303 sequence_44 304 $myparser si:reduce_symbol_end Number 305 return 306 } 307 308 proc sequence_44 {} { upvar 1 myparser myparser 309 # x 310 # ? 311 # (Sign) 312 # + 313 # (Digit) 314 315 $myparser si:value_state_push 316 optional_39 317 $myparser si:valuevalue_part 318 poskleene_42 319 $myparser si:value_state_merge 320 return 321 } 322 323 proc optional_39 {} { upvar 1 myparser myparser 324 # ? 325 # (Sign) 326 327 $myparser si:void2_state_push 328 sym_Sign 329 $myparser si:void_state_merge_ok 330 return 331 } 332 333 proc poskleene_42 {} { upvar 1 myparser myparser 334 # + 335 # (Digit) 336 337 $myparser i_loc_push 338 sym_Digit 339 $myparser si:kleene_abort 340 while {1} { 341 $myparser si:void2_state_push 342 sym_Digit 343 $myparser si:kleene_close 344 } 345 return 346 } 347 348 # 349 # value Symbol 'Sign' 350 # 351 352 proc sym_Sign {} { upvar 1 myparser myparser 353 # [-+] 354 355 $myparser si:void_symbol_start Sign 356 $myparser si:next_class -+ 357 $myparser si:void_leaf_symbol_end Sign 358 return 359 } 360 361 # 362 # value Symbol 'Sinus' 363 # 364 365 proc sym_Sinus {} { upvar 1 myparser myparser 366 # x 367 # "sin\(" 368 # (Expression) 369 # '\)' 370 371 $myparser si:value_symbol_start Sinus 372 sequence_52 373 $myparser si:reduce_symbol_end Sinus 374 return 375 } 376 377 proc sequence_52 {} { upvar 1 myparser myparser 378 # x 379 # "sin\(" 380 # (Expression) 381 # '\)' 382 383 $myparser si:void_state_push 384 $myparser si:next_str sin\50 385 $myparser si:voidvalue_part 386 sym_Expression 387 $myparser si:valuevalue_part 388 $myparser si:next_char \51 389 $myparser si:value_state_merge 390 return 391 } 392 393 # 394 # value Symbol 'Term' 395 # 396 397 proc sym_Term {} { upvar 1 myparser myparser 398 # (Number) 399 400 $myparser si:value_symbol_start Term 401 sym_Number 402 $myparser si:reduce_symbol_end Term 403 return 404 } 405 406 ## END of GENERATED CODE. DO NOT EDIT. 407 # # ## ### ###### ######## ############# 408} 409 410# # ## ### ##### ######## ############# ##################### 411## Ready 412 413package provide SNIT_PACKAGE 1 414return 415