29 lines
714 B
Tcl
29 lines
714 B
Tcl
package require Tcl 8.5
|
|
if {$argc < 3} {error "usage: $argv0 ruleFile inputFile outputFile"}
|
|
lassign $argv ruleFile inputFile outputFile
|
|
|
|
# Read the file of rules
|
|
set rules {}
|
|
set f [open $ruleFile]
|
|
foreach line [split [read $f] \n[close $f]] {
|
|
if {[string match "#*" $line] || $line eq ""} continue
|
|
if {[regexp {^(.+)\s+->\s+(.*)$} $line -> from to]} {
|
|
dict set rules $from $to
|
|
} else {
|
|
error "Syntax error: \"$line\""
|
|
}
|
|
}
|
|
|
|
# Apply the rules in a simplistic manner
|
|
set in [open $inputFile]
|
|
set out [open $outputFile w]
|
|
set data [read $in]
|
|
close $in
|
|
while 1 {
|
|
set newData [string map $rules $data]
|
|
if {$newData eq $data} break
|
|
set data $newData
|
|
}
|
|
puts $out $data
|
|
close $out
|