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