You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
540 lines
11 KiB
540 lines
11 KiB
## -*- 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 |
|
# * |
|
# '<blank>' |
|
# (AddOp) |
|
# * |
|
# '<blank>' |
|
# (Term) |
|
|
|
my si:value_symbol_start Expression |
|
my sequence_18 |
|
my si:reduce_symbol_end Expression |
|
return |
|
} |
|
|
|
method sequence_18 {} { |
|
# x |
|
# (Term) |
|
# * |
|
# x |
|
# * |
|
# '<blank>' |
|
# (AddOp) |
|
# * |
|
# '<blank>' |
|
# (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 |
|
# * |
|
# '<blank>' |
|
# (AddOp) |
|
# * |
|
# '<blank>' |
|
# (Term) |
|
|
|
while {1} { |
|
my si:void2_state_push |
|
my sequence_14 |
|
my si:kleene_close |
|
} |
|
return |
|
} |
|
|
|
method sequence_14 {} { |
|
# x |
|
# * |
|
# '<blank>' |
|
# (AddOp) |
|
# * |
|
# '<blank>' |
|
# (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 {} { |
|
# * |
|
# '<blank>' |
|
|
|
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 |
|
# * |
|
# '<blank>' |
|
# (PowOp) |
|
# * |
|
# '<blank>' |
|
# (Fragment) |
|
|
|
my si:value_symbol_start Factor |
|
my sequence_32 |
|
my si:reduce_symbol_end Factor |
|
return |
|
} |
|
|
|
method sequence_32 {} { |
|
# x |
|
# (Fragment) |
|
# * |
|
# x |
|
# * |
|
# '<blank>' |
|
# (PowOp) |
|
# * |
|
# '<blank>' |
|
# (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 |
|
# * |
|
# '<blank>' |
|
# (PowOp) |
|
# * |
|
# '<blank>' |
|
# (Fragment) |
|
|
|
while {1} { |
|
my si:void2_state_push |
|
my sequence_28 |
|
my si:kleene_close |
|
} |
|
return |
|
} |
|
|
|
method sequence_28 {} { |
|
# x |
|
# * |
|
# '<blank>' |
|
# (PowOp) |
|
# * |
|
# '<blank>' |
|
# (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 |
|
# '\(' |
|
# * |
|
# '<blank>' |
|
# (Expression) |
|
# * |
|
# '<blank>' |
|
# '\)' |
|
# (Number) |
|
# (Var) |
|
|
|
my si:value_symbol_start Fragment |
|
my choice_46 |
|
my si:reduce_symbol_end Fragment |
|
return |
|
} |
|
|
|
method choice_46 {} { |
|
# / |
|
# x |
|
# '\(' |
|
# * |
|
# '<blank>' |
|
# (Expression) |
|
# * |
|
# '<blank>' |
|
# '\)' |
|
# (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 |
|
# '\(' |
|
# * |
|
# '<blank>' |
|
# (Expression) |
|
# * |
|
# '<blank>' |
|
# '\)' |
|
|
|
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 |
|
# * |
|
# '<blank>' |
|
# (MulOp) |
|
# * |
|
# '<blank>' |
|
# (Factor) |
|
|
|
my si:value_symbol_start Term |
|
my sequence_75 |
|
my si:reduce_symbol_end Term |
|
return |
|
} |
|
|
|
method sequence_75 {} { |
|
# x |
|
# (Factor) |
|
# * |
|
# x |
|
# * |
|
# '<blank>' |
|
# (MulOp) |
|
# * |
|
# '<blank>' |
|
# (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 |
|
# * |
|
# '<blank>' |
|
# (MulOp) |
|
# * |
|
# '<blank>' |
|
# (Factor) |
|
|
|
while {1} { |
|
my si:void2_state_push |
|
my sequence_71 |
|
my si:kleene_close |
|
} |
|
return |
|
} |
|
|
|
method sequence_71 {} { |
|
# x |
|
# * |
|
# '<blank>' |
|
# (MulOp) |
|
# * |
|
# '<blank>' |
|
# (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
|
|
|