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