IPSIS_F11.tcl
39 lines
| 1.2 KiB
| application/x-tcl
|
TclLexer
r2 | #!/usr/bin/tclsh | |||
# control structures should have complete curly-braced block of code | ||||
foreach fileName [getSourceFileNames] { | ||||
set state "start" | ||||
set prev "" | ||||
foreach token [getTokens $fileName 1 0 -1 -1 {for if while do leftparen rightparen leftbrace rightbrace semicolon}] { | ||||
set type [lindex $token 3] | ||||
if {$state == "control"} { | ||||
if {$type == "leftparen"} { | ||||
incr parenCount | ||||
} elseif {$type == "rightparen"} { | ||||
incr parenCount -1 | ||||
if {$parenCount == 0} { | ||||
set state "expectedblock" | ||||
} | ||||
} | ||||
} elseif {$state == "expectedblock"} { | ||||
if {$type != "leftbrace"} { | ||||
set line [lindex $token 1] | ||||
report $fileName $line "full block {} expected in the control structure" | ||||
} | ||||
set state "block" | ||||
} | ||||
if {$type == "for" || $type == "if"} { | ||||
set parenCount 0 | ||||
set state "control" | ||||
} elseif {$type == "do"} { | ||||
set state "expectedblock" | ||||
} elseif {$type == "while" && $prev != "rightbrace"} { | ||||
set parenCount 0 | ||||
set state "control" | ||||
} | ||||
set prev $type | ||||
} | ||||
} | ||||