gen_peg_hb.tcl

Go to the documentation of this file.
00001 /*  -*- tcl -*-*/
00002 /* */
00003 /*  Copyright (c) 2005 by Andreas Kupries <andreas_kupries@users.sourceforge.net>*/
00004 /*  Parser Generator / Backend - PEG in half baked form for PEG container.*/
00005 
00006 /*  ### ### ### ######### ######### #########*/
00007 /*  Requisites*/
00008 
00009 package require page::util::peg
00010 
00011 namespace ::page::gen::peg::hb {
00012     /*  Get various utilities.*/
00013 
00014     namespace import ::page::util::peg::*
00015 }
00016 
00017 /*  ### ### ### ######### ######### #########*/
00018 /*  API*/
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 /*  Internal. Helpers*/
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 /*  Internal. Strings.*/
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 /*  Ready*/
00078 
00079 package provide page::gen::peg::hb 0.1
00080 

Generated on 21 Sep 2010 for Gui by  doxygen 1.6.1