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