2011-11-17 10 views
6

私はいくつかのコードを開発しました。LinuxマシンでのTclインタプリタのエラーフラグに問題があります。それは elseif状態に入るまでTclスクリプトのエラーの静的検出

#!/usr/bin/tclsh 
if {1} { 
    puts "abc1" 
} elseif {} { 
    puts "abc2" 
} 

上記のコードは"elseif"条件の低迷エラーではありません。 この種の誤植を意図せずに確認する方法はありますか?

ありがとうございます!

+1

を生成します。 – schlenk

+0

@schlenkなど...? – Thufir

答えて

2

Donalの答えを詳述するために、一般的には実行できないため、ifコマンドの前に実行されたコードはifコマンドを再定義する可能性があるため、コンパイル時にエラーを検出しません。

gets stdin input 
if {$input == "fail"} { 
    rename if if_ 
    proc if {arg1 arg2 arg3} { 
    puts "ha ha" 
    } 
} 
if {1} { puts "success"} 

はっきり{1}行が持っている場合ならば、静的に決定することは不可能である。このケースであるかどうかを決定すること

このスクリプトを考える(これは停止問題があるIE)コードを実行することですプログラムを実行しないで正しい引数の数

TCLには実際には構文がありません。コンパイラがチェックできるものはありません。場合によっては正確なリントスタイルの警告があります。

5

コンパイル時にTclはエラーを検出しません。上記のサンプルでは、​​まず最初にelseif節を調べる必要はないと判断できます。最初にputsを発行するだけです。

ここで、些細ではない最初の条件がある場合、elseif式のエラーは、到達するまで報告されない場合があります。これは、Tclのセマンティクス、特にifコマンドの定義方法です。コマンドの実行時に評価のエラー(グロスメジャー構文とは対照的に)が報告されます。私はあなたの不満を理解することができ、静的構文分析ツールのTcler's Wiki pageをチェックすることをお勧めします。これは、潜在的な問題を引き起こす可能性があります。特に、私はFrinkthe checker tool in TDKについてよく知っています(後者は商用ツールですが、非常に高品質です)。

+3

[Nagelfar](http://nagelfar.berlios.de/)は静的なTcl構文チェッカーのもう一つのオプションです。 – schlenk

+0

@schlenk:+1;私はそれをリストすることを覚えていたはずです。 –

0

Tclはコンパイル時にエラーを検出しませんが、 regexpを使用して構文をチェックできます。 パターン "elseif {"、もし存在すれば、 "}"中に文字があるかどうかを確認します。何も表示されない場合は、エラーメッセージを表示します。

0

このような問題を見つけることができるtcl静的構文チェッカーがあります。ここで

は、このようなcheckesのリストです:http://wiki.tcl.tk/3162

ttclchecker http://www.xdobry.de/ttclcheck は、あなたのエディタで強調表示する良い構文は役立つかもしれないこの短いスクリプトの次のエラーメッセージ

stackoverflow.tcl:4: error in expression missing operator <<{}>> 
関連する問題