This procedure is defined in the server but not documented via ad_proc or proc_doc and may be intended as a private interface.
The procedure is defined as:
proc sgml::CModelMakeTransitionTable {state st} {
upvar #0 $state var
# Construct nullable, firstpos and lastpos functions
array set var {number 0}
foreach {nullable firstpos lastpos} [ TraverseDepth1st $state $st {
# Evaluated for leaf nodes
# Compute nullable(n)
# Compute firstpos(n)
# Compute lastpos(n)
set nullable [nullable leaf $rep $name]
set firstpos [list {} $var(number)]
set lastpos [list {} $var(number)]
set var(pos:$var(number)) $name
} {
# Evaluated for nonterminal nodes
# Compute nullable, firstpos, lastpos
set firstpos [firstpos $cs $firstpos $nullable]
set lastpos [lastpos $cs $lastpos $nullable]
set nullable [nullable nonterm $rep $cs $nullable]
} ] break
set accepting [incr var(number)]
set var(pos:$accepting) #
# var(pos:N) maps from position to symbol.
# Construct reverse map for convenience.
# NB. A symbol may appear in more than one position.
# var is about to be reset, so use different arrays.
foreach {pos symbol} [array get var pos:*] {
set pos [lindex [split $pos :] 1]
set pos2symbol($pos) $symbol
lappend sym2pos($symbol) $pos
}
# Construct the followpos functions
unset -nocomplain var
followpos $state $st $firstpos $lastpos
# Construct transition table
# Dstates is [union $marked $unmarked]
set unmarked [list [lindex $firstpos 1]]
while {[llength $unmarked]} {
set T [lindex $unmarked 0]
lappend marked $T
set unmarked [lrange $unmarked 1 end]
# Find which input symbols occur in T
set symbols {}
foreach pos $T {
if {$pos != $accepting && [lsearch $symbols $pos2symbol($pos)] < 0} {
lappend symbols $pos2symbol($pos)
}
}
foreach a $symbols {
set U {}
foreach pos $sym2pos($a) {
if {[lsearch $T $pos] >= 0} {
# add followpos($pos)
if {$var($pos) == {}} {
lappend U $accepting
} else {
lappend U {*}$var($pos)
}
}
}
set U [makeSet $U]
if {[llength $U] && [lsearch $marked $U] < 0 && [lsearch $unmarked $U] < 0} {
lappend unmarked $U
}
set Dtran($T,$a) $U
}
}
return [list [array get Dtran] [array get sym2pos] $accepting]
}