gen_peg_hb.tcl
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 package require page::util::peg
00010
00011 namespace ::page::gen::peg::hb {
00012
00013
00014 namespace import ::page::util::peg::*
00015 }
00016
00017
00018
00019
00020 ret ::page::gen::peg::hb (type t , type chan) {
00021 hb::printWarnings [hb::getWarnings $t]
00022
00023 set gstart [$t get root start]
00024 if {$gstart ne ""} {
00025 set gstart [hb::peOf $t $gstart]
00026 } else {
00027 puts stderr "No start expression."
00028 }
00029
00030 hb::Start $chan $gstart
00031
00032 set temp {}
00033 set max -1
00034 foreach {sym def} [$t get root definitions] {
00035 set eroot [lindex [$t children $def] 0]
00036 set l [string length [list $sym]]
00037 if {$l > $max} {set max $l}
00038 lappend temp \
00039 [list $sym [$t get $def mode] [hb::peOf $t $eroot] $l]
00040 }
00041
00042 foreach e [lsort -dict -index 0 $temp] {
00043 foreach {sym mode rule l} $e break
00044 hb::Rule $chan $sym $mode $rule [expr {$max - $l}]
00045 }
00046 return
00047 }
00048
00049
00050
00051
00052 ret ::page::gen::peg::hb::Start (type chan , type pe) {
00053 puts $chan "Start [printTclExpr $pe]\n"
00054 return
00055 }
00056
00057 ret ::page::gen::peg::hb::Rule (type chan , type sym , type mode , type pe , type off) {
00058 variable ms
00059 set off [string repeat " " $off]
00060 puts $chan "Define $ms($mode) $sym$off [printTclExpr $pe]"
00061 return
00062 }
00063
00064
00065
00066
00067 namespace ::page::gen::peg::hb {
00068 variable ms ; array ms = {
00069 value {value }
00070 discard {discard}
00071 match {match }
00072 leaf {leaf }
00073 }
00074 }
00075
00076
00077
00078
00079 package provide page::gen::peg::hb 0.1
00080