7
votes

Détection statique des erreurs dans les scripts TCL

J'ai développé du code et je suis confronté à un problème avec l'erreur d'erreur de l'interprète TCL sur une machine Linux.

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

tcl

2 commentaires

Une bonne syntaxe en surbrillance dans votre éditeur pourrait vous aider.


@schlenk comme ...?


4 Réponses :


6
votes

TCL ne trouve pas d'erreur au moment de la compilation et dans l'échantillon ci-dessus, il peut déterminer qu'il n'aura jamais besoin d'examiner les clauses elseif en premier lieu; Il est simplement question que le premier met directement.

Maintenant, dans le cas où il y a une première condition non triviale, c'est le cas que les erreurs dans l'expression elseif ne sont pas rapportées tant qu'elles sont atteintes. C'est ainsi que la sémantique de TCL - et en particulier de la commande si est définie; Les erreurs d'évaluation (par opposition à la syntaxe majeure brute) sont rapportées au moment de l'exécution de la commande. Je peux comprendre votre frustration avec cela, et vous suggérer de consulter le page wiki de TCLER sur des outils d'analyse de la syntaxe statique , qui peut signaler des problèmes potentiels pour vous (selon des hypothèses très modestes qui sont pratiquement toujours vraies). En particulier, j'ai entendu de bonnes choses sur frink et L'outil Checker dans TDK (ce dernier étant un outil commercial, mais de très haute qualité).


2 commentaires

Nagelfar est une autre option pour un vérificateur de syntaxe TCL statique.


@schlenk: +1; J'aurais dû me souvenir de l'énumérer aussi.



3
votes

Elaborer sur la réponse de Donal, TCL ne trouve pas d'erreur lors de la compilation de la compilation car, dans le cas général, il ne peut être effectué, aucun code exécuté avant que le SI aurait redéfini la commande Si elle pourrait être valide, le seul moyen de Déterminez si tel est le cas d'exécuter le code (c'est-à-dire que c'est le problème d'arrêt)

considérer ce script: xxx

Il est impossible de déterminer de manière statique si le Si {1} ligne a le bon nombre d'arguments sans exécuter le programme

TCL n'a vraiment pratiquement aucune syntaxe, il n'y a rien de compilateur peut vérifier, le meilleur que vous puissiez faire est des avertissements de style de peluche, ce qui ne fera que être précis dans certains cas


0 commentaires

0
votes

TCL ne trouve pas d'erreur au moment de la compilation, mais nous pouvons vérifier la syntaxe en utilisant Regexp . Faites correspondre le modèle «elseif {», si vous vérifiez s'il existe des caractères dans la corset bouclé «}». Si rien de présent, imprimez un message d'erreur.


0 commentaires

0
votes

Il existe un vérificateur de syntaxe statique TCL pouvant trouver de tels problèmes.

Voici la liste de tels contrôles: http. : //wiki.tcl.tk/3162

Le ttclchecker http: // www.xdobry.de/ttclcheck Produit le message d'erreur suivant pour ce script court xxx


0 commentaires