1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
# -*- tcl -*-
#
# Copyright (c) 2005 by Andreas Kupries <andreas_kupries@users.sourceforge.net>
# Parser Generator / Backend - PEG as serialized PEG container.
# ### ### ### ######### ######### #########
## Requisites
package require grammar::peg
package require page::util::quote
package require page::util::peg
namespace eval ::page::gen::peg::ser {
# Get the peg char de/encoder commands.
# (unquote, quote'tcl), and other utilities.
namespace import ::page::util::quote::*
namespace import ::page::util::peg::*
}
# ### ### ### ######### ######### #########
## API
proc ::page::gen::peg::ser {t chan} {
ser::printWarnings [ser::getWarnings $t]
::grammar::peg gr
set gstart [$t get root start]
if {$gstart ne ""} {
gr start [ser::peOf $t $gstart]
} else {
page_info "No start expression."
}
foreach {sym def} [$t get root definitions] {
set eroot [lindex [$t children $def] 0]
gr nonterminal add $sym [ser::peOf $t $eroot]
gr nonterminal mode $sym [$t get $def mode]
}
puts $chan [gr serialize]
gr destroy
return
}
# ### ### ### ######### ######### #########
## Internal. Helpers
proc ::page::gen::peg::ser::GetRules {t} {
return $res
}
# ### ### ### ######### ######### #########
## Internal. Strings.
namespace eval ::page::gen::peg::ser {}
# ### ### ### ######### ######### #########
## Ready
package provide page::gen::peg::ser 0.1
|