1## -*- tcl -*- 2## 3## OO-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 OO 16package require pt::rde::oo ; # OO-based implementation of the 17 # PARAM virtual machine 18 # underlying the Tcl/PARAM code 19 # used below. 20 21# # ## ### ##### ######## ############# ##################### 22## 23 24oo::class create PARSER { 25 # # ## ### ##### ######## ############# 26 ## Public API 27 28 superclass pt::rde::oo ; # TODO - Define this class. 29 # Or can we inherit from a snit 30 # class too ? 31 32 method parse {channel} { 33 my reset $channel 34 my MAIN ; # Entrypoint for the generated code. 35 return [my complete] 36 } 37 38 method parset {text} { 39 my reset 40 my data $text 41 my MAIN ; # Entrypoint for the generated code. 42 return [my complete] 43 } 44 45 # # ## ### ###### ######## ############# 46 ## BEGIN of GENERATED CODE. DO NOT EDIT. 47 48 # 49 # Grammar Start Expression 50 # 51 52 method MAIN {} { 53 my sym_Expression 54 return 55 } 56 57 # 58 # value Symbol 'AddOp' 59 # 60 61 method sym_AddOp {} { 62 # [-+] 63 64 my si:void_symbol_start AddOp 65 my si:next_class -+ 66 my si:void_leaf_symbol_end AddOp 67 return 68 } 69 70 # 71 # value Symbol 'Digit' 72 # 73 74 method sym_Digit {} { 75 # [0123456789] 76 77 my si:void_symbol_start Digit 78 my si:next_class 0123456789 79 my si:void_leaf_symbol_end Digit 80 return 81 } 82 83 # 84 # value Symbol 'Expression' 85 # 86 87 method sym_Expression {} { 88 # / 89 # x 90 # '\(' 91 # (Expression) 92 # '\)' 93 # x 94 # (Factor) 95 # * 96 # x 97 # (MulOp) 98 # (Factor) 99 100 my si:value_symbol_start Expression 101 my choice_20 102 my si:reduce_symbol_end Expression 103 return 104 } 105 106 method choice_20 {} { 107 # / 108 # x 109 # '\(' 110 # (Expression) 111 # '\)' 112 # x 113 # (Factor) 114 # * 115 # x 116 # (MulOp) 117 # (Factor) 118 119 my si:value_state_push 120 my sequence_9 121 my si:valuevalue_branch 122 my sequence_18 123 my si:value_state_merge 124 return 125 } 126 127 method sequence_9 {} { 128 # x 129 # '\(' 130 # (Expression) 131 # '\)' 132 133 my si:void_state_push 134 my si:next_char \50 135 my si:voidvalue_part 136 my sym_Expression 137 my si:valuevalue_part 138 my si:next_char \51 139 my si:value_state_merge 140 return 141 } 142 143 method sequence_18 {} { 144 # x 145 # (Factor) 146 # * 147 # x 148 # (MulOp) 149 # (Factor) 150 151 my si:value_state_push 152 my sym_Factor 153 my si:valuevalue_part 154 my kleene_16 155 my si:value_state_merge 156 return 157 } 158 159 method kleene_16 {} { 160 # * 161 # x 162 # (MulOp) 163 # (Factor) 164 165 while {1} { 166 my si:void2_state_push 167 my sequence_14 168 my si:kleene_close 169 } 170 return 171 } 172 173 method sequence_14 {} { 174 # x 175 # (MulOp) 176 # (Factor) 177 178 my si:value_state_push 179 my sym_MulOp 180 my si:valuevalue_part 181 my sym_Factor 182 my si:value_state_merge 183 return 184 } 185 186 # 187 # value Symbol 'Factor' 188 # 189 190 method sym_Factor {} { 191 # x 192 # (Term) 193 # * 194 # x 195 # (AddOp) 196 # (Term) 197 198 my si:value_symbol_start Factor 199 my sequence_30 200 my si:reduce_symbol_end Factor 201 return 202 } 203 204 method sequence_30 {} { 205 # x 206 # (Term) 207 # * 208 # x 209 # (AddOp) 210 # (Term) 211 212 my si:value_state_push 213 my sym_Term 214 my si:valuevalue_part 215 my kleene_28 216 my si:value_state_merge 217 return 218 } 219 220 method kleene_28 {} { 221 # * 222 # x 223 # (AddOp) 224 # (Term) 225 226 while {1} { 227 my si:void2_state_push 228 my sequence_26 229 my si:kleene_close 230 } 231 return 232 } 233 234 method sequence_26 {} { 235 # x 236 # (AddOp) 237 # (Term) 238 239 my si:value_state_push 240 my sym_AddOp 241 my si:valuevalue_part 242 my sym_Term 243 my si:value_state_merge 244 return 245 } 246 247 # 248 # value Symbol 'MulOp' 249 # 250 251 method sym_MulOp {} { 252 # [*/] 253 254 my si:void_symbol_start MulOp 255 my si:next_class */ 256 my si:void_leaf_symbol_end MulOp 257 return 258 } 259 260 # 261 # value Symbol 'Number' 262 # 263 264 method sym_Number {} { 265 # x 266 # ? 267 # (Sign) 268 # + 269 # (Digit) 270 271 my si:value_symbol_start Number 272 my sequence_41 273 my si:reduce_symbol_end Number 274 return 275 } 276 277 method sequence_41 {} { 278 # x 279 # ? 280 # (Sign) 281 # + 282 # (Digit) 283 284 my si:value_state_push 285 my optional_36 286 my si:valuevalue_part 287 my poskleene_39 288 my si:value_state_merge 289 return 290 } 291 292 method optional_36 {} { 293 # ? 294 # (Sign) 295 296 my si:void2_state_push 297 my sym_Sign 298 my si:void_state_merge_ok 299 return 300 } 301 302 method poskleene_39 {} { 303 # + 304 # (Digit) 305 306 my i_loc_push 307 my sym_Digit 308 my si:kleene_abort 309 while {1} { 310 my si:void2_state_push 311 my sym_Digit 312 my si:kleene_close 313 } 314 return 315 } 316 317 # 318 # value Symbol 'Sign' 319 # 320 321 method sym_Sign {} { 322 # [-+] 323 324 my si:void_symbol_start Sign 325 my si:next_class -+ 326 my si:void_leaf_symbol_end Sign 327 return 328 } 329 330 # 331 # value Symbol 'Term' 332 # 333 334 method sym_Term {} { 335 # (Number) 336 337 my si:value_symbol_start Term 338 my sym_Number 339 my si:reduce_symbol_end Term 340 return 341 } 342 343 ## END of GENERATED CODE. DO NOT EDIT. 344 # # ## ### ###### ######## ############# 345} 346 347# # ## ### ##### ######## ############# ##################### 348## Ready 349 350package provide OO_PACKAGE 1 351return 352