# Author: Malcolm Kesson (2007)
proc getCode { ruletoken } {
set code 0
set prefix [string index $ruletoken 0]
# random substitution
if {$prefix == "~"} { set code 1 }
# use on last rewrite only
if {$prefix == "*"} { set code 2 }
# do NOT use on last rewrite
if {$prefix == "!"} { set code 3 }
return $code
}
# Note that comments in a Lscript begin "#"
proc getScript { path } {
set infile [open $path r]
while {[eof $infile] != 1} {
set line [string trim [gets $infile]]
if {$line != "" && [string index $line 0] != "#"} {
lappend lines $line
}
}
return $lines
}
proc readScript { lines data } {
upvar $data script
foreach line $lines {
set pname [lindex $line 0]
if {$pname == "rule"} {
set token [lindex $line 1]
set rvalue [lindex $line 2]
set rcode [getCode $token]
set rchar $token
if {$rcode == 1} {
set rchar [string trim $token "~"]
} elseif {$rcode == 2} {
set rchar [string trim $token "*"]
} elseif {$rcode == 3} {
set rchar [string trim $token "!"]
}
set item [getArrayValueOf tempRules $rchar]
# Begin a new rule
if {$item == ""} {
set item [list $rcode $rvalue]
} else {
# Append to an existing rule
lappend item $rvalue
}
set tempRules($rchar) $item
} elseif {$pname == "statement"} {
set statechar [lindex $line 1]
set stateval [lindex $line 2]
set tempStat($statechar) $stateval
} else {
set paramvalue [lindex $line 1]
set script($pname) $paramvalue
}
}
set script(rule) [array get tempRules]
#puts "READER [array get tempRules]"
set script(statement) [array get tempStat]
#close $infile
}