## -*- tcl -*- ## ## OO-based Tcl/PARAM implementation of the parsing ## expression grammar ## ## calculator grammar ## ## Generated from file calctest.tcl ## for user jnoble ## # # ## ### ##### ######## ############# ##################### ## Requirements package require Tcl 8.5 9 package require TclOO package require pt::rde::oo ; # OO-based implementation of the # PARAM virtual machine # underlying the Tcl/PARAM code # used below. # # ## ### ##### ######## ############# ##################### ## oo::class create calculator_test { # # ## ### ##### ######## ############# ## Public API superclass pt::rde::oo ; # TODO - Define this class. # Or can we inherit from a snit # class too ? method parse {channel} { my reset $channel my MAIN ; # Entrypoint for the generated code. return [my complete] } method parset {text} { my reset {} my data $text my MAIN ; # Entrypoint for the generated code. return [my complete] } # # ## ### ###### ######## ############# ## BEGIN of GENERATED CODE. DO NOT EDIT. # # Grammar Start Expression # method MAIN {} { my sym_Expression return } # # value Symbol 'AddOp' # method sym_AddOp {} { # [+-] my si:void_symbol_start AddOp my si:next_class +- my si:void_leaf_symbol_end AddOp return } # # value Symbol 'Digit' # method sym_Digit {} { # [0123456789] my si:void_symbol_start Digit my si:next_class 0123456789 my si:void_leaf_symbol_end Digit return } # # value Symbol 'Expression' # method sym_Expression {} { # x # (Term) # * # x # * # '' # (AddOp) # * # '' # (Term) my si:value_symbol_start Expression my sequence_18 my si:reduce_symbol_end Expression return } method sequence_18 {} { # x # (Term) # * # x # * # '' # (AddOp) # * # '' # (Term) my si:value_state_push my sym_Term my si:valuevalue_part my kleene_16 my si:value_state_merge return } method kleene_16 {} { # * # x # * # '' # (AddOp) # * # '' # (Term) while {1} { my si:void2_state_push my sequence_14 my si:kleene_close } return } method sequence_14 {} { # x # * # '' # (AddOp) # * # '' # (Term) my si:void_state_push my kleene_8 my si:voidvalue_part my sym_AddOp my si:valuevalue_part my kleene_8 my si:valuevalue_part my sym_Term my si:value_state_merge return } method kleene_8 {} { # * # '' while {1} { my si:void2_state_push my si:next_char \40 my si:kleene_close } return } # # value Symbol 'Factor' # method sym_Factor {} { # x # (Fragment) # * # x # * # '' # (PowOp) # * # '' # (Fragment) my si:value_symbol_start Factor my sequence_32 my si:reduce_symbol_end Factor return } method sequence_32 {} { # x # (Fragment) # * # x # * # '' # (PowOp) # * # '' # (Fragment) my si:value_state_push my sym_Fragment my si:valuevalue_part my kleene_30 my si:value_state_merge return } method kleene_30 {} { # * # x # * # '' # (PowOp) # * # '' # (Fragment) while {1} { my si:void2_state_push my sequence_28 my si:kleene_close } return } method sequence_28 {} { # x # * # '' # (PowOp) # * # '' # (Fragment) my si:void_state_push my kleene_8 my si:voidvalue_part my sym_PowOp my si:valuevalue_part my kleene_8 my si:valuevalue_part my sym_Fragment my si:value_state_merge return } # # value Symbol 'Fragment' # method sym_Fragment {} { # / # x # '\(' # * # '' # (Expression) # * # '' # '\)' # (Number) # (Var) my si:value_symbol_start Fragment my choice_46 my si:reduce_symbol_end Fragment return } method choice_46 {} { # / # x # '\(' # * # '' # (Expression) # * # '' # '\)' # (Number) # (Var) my si:value_state_push my sequence_42 my si:valuevalue_branch my sym_Number my si:valuevalue_branch my sym_Var my si:value_state_merge return } method sequence_42 {} { # x # '\(' # * # '' # (Expression) # * # '' # '\)' my si:void_state_push my si:next_char \50 my si:voidvoid_part my kleene_8 my si:voidvalue_part my sym_Expression my si:valuevalue_part my kleene_8 my si:valuevalue_part my si:next_char \51 my si:value_state_merge return } # # value Symbol 'MulOp' # method sym_MulOp {} { # [*/] my si:void_symbol_start MulOp my si:next_class */ my si:void_leaf_symbol_end MulOp return } # # value Symbol 'Number' # method sym_Number {} { # x # ? # (Sign) # + # (Digit) my si:value_symbol_start Number my sequence_57 my si:reduce_symbol_end Number return } method sequence_57 {} { # x # ? # (Sign) # + # (Digit) my si:value_state_push my optional_52 my si:valuevalue_part my poskleene_55 my si:value_state_merge return } method optional_52 {} { # ? # (Sign) my si:void2_state_push my sym_Sign my si:void_state_merge_ok return } method poskleene_55 {} { # + # (Digit) my i_loc_push my sym_Digit my si:kleene_abort while {1} { my si:void2_state_push my sym_Digit my si:kleene_close } return } # # value Symbol 'PowOp' # method sym_PowOp {} { # "**" my si:void_symbol_start PowOp my si:next_str ** my si:void_leaf_symbol_end PowOp return } # # value Symbol 'Sign' # method sym_Sign {} { # [-+] my si:void_symbol_start Sign my si:next_class -+ my si:void_leaf_symbol_end Sign return } # # value Symbol 'Term' # method sym_Term {} { # x # (Factor) # * # x # * # '' # (MulOp) # * # '' # (Factor) my si:value_symbol_start Term my sequence_75 my si:reduce_symbol_end Term return } method sequence_75 {} { # x # (Factor) # * # x # * # '' # (MulOp) # * # '' # (Factor) my si:value_state_push my sym_Factor my si:valuevalue_part my kleene_73 my si:value_state_merge return } method kleene_73 {} { # * # x # * # '' # (MulOp) # * # '' # (Factor) while {1} { my si:void2_state_push my sequence_71 my si:kleene_close } return } method sequence_71 {} { # x # * # '' # (MulOp) # * # '' # (Factor) my si:void_state_push my kleene_8 my si:voidvalue_part my sym_MulOp my si:valuevalue_part my kleene_8 my si:valuevalue_part my sym_Factor my si:value_state_merge return } # # value Symbol 'Var' # method sym_Var {} { # x # '$' # [xyz] my si:void_symbol_start Var my sequence_80 my si:void_leaf_symbol_end Var return } method sequence_80 {} { # x # '$' # [xyz] my si:void_state_push my si:next_char $ my si:voidvoid_part my si:next_class xyz my si:void_state_merge return } ## END of GENERATED CODE. DO NOT EDIT. # # ## ### ###### ######## ############# } # # ## ### ##### ######## ############# ##################### ## Ready package provide calculator_test 999999.0a1.0 return