Wie überprüfe ich, ob alle Codepfade einen Wert zurückgeben

8

Ich schreibe einen Compiler für eine eingebettete Skriptsprache, die in meiner Anwendung ausgeführt wird. Ich arbeite derzeit an der semantischen Analyse Teil des Compilers. Ich möchte in der Theorie wissen, wie man überprüft, ob alle Code-Pfade in einem gegebenen Skript einen Wert zurückgeben. Wenn Sie eine Google-Suche durchführen, erhalten Sie nur Ergebnisse, wenn Nutzer den Fehler in ihrem eigenen Code sehen, wenn nicht alle Codepfade einen Wert zurückgeben (meist SO-Fragen). daher konnte ich keine Quellen finden, die erklären, wie die eigentliche Überprüfung durchgeführt werden kann. Kann mir jemand in die richtige Richtung zeigen?

HINWEIS: Ich suche speziell nach einer autoritativen Quelle, die einen rigorosen Algorithmus umreißt, wenn irgend möglich.

    
MrCodeMnky 21.02.2014, 21:50
quelle

1 Antwort

6

Sie können dies mit einem rekursiven Spaziergang über den AST tun. Zum Beispiel:

  • Eine Folge von Anweisungen wird auf allen Steuerpfaden zurückgegeben, wenn entweder die erste Anweisung auf allen Steuerpfaden zurückkehrt oder die zweite Anweisung auf allen Steuerpfaden zurückkehrt.

  • Eine if-Anweisung gibt auf allen Steuerpfaden zurück, wenn die Zweige "if" und "else" auf allen Steuerpfaden zurückkehren oder die "if" -Anweisung immer wahr ist.

  • Eine while-Schleife gibt nur dann alle Steuerpfade zurück, wenn die Bedingung "while" immer wahr ist.

  • Eine Rückgabeanweisung gibt alle Steuerpfade zurück.

Hoffe, das hilft!

    
templatetypedef 21.02.2014, 21:57
quelle