So debuggen Sie den AppleScript-Fehler: „Erwartetes „*)“, aber Ende des Skripts gefunden.“

Ich werde verrückt, wenn ich versuche, den folgenden Fehler in meinem AppleScript-Code zu beheben:

Geben Sie hier die Bildbeschreibung ein

Dieser Fehler bedeutet, dass ich irgendwo im Code einen Kommentar mit einem geöffnet habe, (*aber vergessen habe, ihn mit einem zu schließen *).

Der Code enthält über 4000 Zeilen und Hunderte von Kommentaren. Ich habe den Code stundenlang durchgesehen, um diesen fehlenden Abschluss zu finden, aber ich kann ihn nicht finden.

Gibt es eine Methode oder Anwendung, die mich über die genaue Codezeile informieren kann, die für den Fehler verantwortlich ist?

Dieser Fehler wird auch ausgegeben, wenn Sie eine --Zeile als Kommentar innerhalb des (* *)-Blocks haben und nicht durch einen Zeilenumbruch getrennt sind.
Um zu verdeutlichen, was Tetsujin gesagt hat: Sie können keinen --end-of-line-Kommentar in derselben Zeile wie den abschließenden *) Blockkommentar haben , und wenn dies die Ursache Ihres Fehlers ist, können Sie ihn finden, indem Sie den AppleScript- Code kopieren und einfügen einen Texteditor, der grepeinen regulären Ausdruck unterstützt, und dann nach dieser Zeichenfolge .*--.*\*\)als RegEx suchen. Ich verwende TextWrangler für Operationen wie diese.
Ein Beispiel dafür, wie Sie Kommentare verwenden können, finden Sie im AppleScript-Sprachhandbuch – Kommentare .
@user3439894 Ich habe TextWrangler heruntergeladen und meinen AppleScript-Code in TextWrangler kopiert. Also sollte ich cmd + F drücken, dann die von Ihnen angegebene Zeichenfolge in das Feld „Find“ einfügen, dann das Kontrollkästchen für „Grep“ aktivieren und schließlich auf die Schaltfläche „Find“ klicken. Ich bin mir nicht sicher, was Sie mit "als RegEx" meinen. Gibt es etwas, das ich vermisse? Ich frage, weil ich gerade einen --end-of-line-Kommentar in derselben Zeile wie einen schließenden *) Blockkommentar hinzugefügt habe, aber die Funktion "Suchen" findet immer noch keine Instanzen.
Ich habe kein Problem damit, den definierten RegEx zu finden, der für Regular Expression steht , wenn er vorhanden ist. Welche Version von OS X/mac OS und TextWrangler verwenden Sie?
Entschuldigen Sie. Die "Suchen"-Funktion von TextWrangler funktioniert bei mir tatsächlich korrekt. Ich habe gelernt, dass mein Code keine Instanz eines --end-of-line-Kommentars in derselben Zeile wie ein schließender *) Blockkommentar hat. Aber ich danke Ihnen und Tetsujin, dass Sie mich darüber informiert haben, dass dieser Fehler auch den Fehler im Titel meiner Frage hervorrufen würde. Ich habe immer noch nicht die Codezeile gefunden, die für den Fehler verantwortlich ist, obwohl ich jetzt die von Glorfindel bereitgestellte Methode verwende. Ich suche weiter...
Wenn Sie eine Kopie des Codes archivieren und auf http://www.tinyupload.com hochladen und dann die Download-URL angeben möchten, finde ich heraus, wo das Problem liegt.
@user3439894 Vielen Dank für das Angebot. Endlich habe ich die problematische Zeile gefunden. Siehe meine Antwort unten.

Antworten (2)

Es gibt ein Syntax-Highlighting-Paket für AppleScript für den Texteditor Atom . Es funktioniert besser als das mit dem Skript-Editor bereitgestellte, da es mehrzeilige Kommentare korrekt erkennt, auch wenn das Skript selbst nicht kompiliert wird:

Geben Sie hier die Bildbeschreibung ein

Von dort aus sollte es einfach sein, die fehlenden zu identifizieren *).

Hallo, ich habe Atom heruntergeladen und das Sprach-Applescript-Paket installiert, aber ich verstehe nicht, wie ich das Paket tatsächlich ausführen soll?
Bei mir wurde es automatisch angewendet, wenn ich ein vorhandenes AppleScript-Dokument öffnete.
Ich habe ein vorhandenes AppleScript-Dokument geöffnet und es funktioniert jetzt für mich. Aber wie erleichtert diese Methode das Auffinden der Vermissten *)? Es ist nicht so, dass es mir sagt, welche Zeile den Fehler enthält, richtig?
Nein, Sie müssen das Dokument immer noch selbst durchgehen, aber die Syntaxhervorhebung wird Ihnen wirklich helfen, den Fehler zu finden.

Aktualisieren:

Der Grund, warum ich keine Instanz von a (*ohne Entsprechung finden konnte *), liegt darin, dass jede Instanz von (* tatsächlich eine Entsprechung hat *). Dies war nicht die Ursache des Fehlers, trotz der irreführenden Fehlermeldung, die dies behauptete.

Für den Fehler war folgender Kommentar verantwortlich:

    (*  
        "This is the text that I want to display            
    *)

Sie können anscheinend keine ungerade Anzahl doppelter Anführungszeichen in einen AppleScript-Kommentar setzen. Das heißt, wenn Sie ein Angebot öffnen, müssen Sie das Angebot schließen.

Ich habe keine Ahnung, warum das so ist. Es ist ein Kommentar , um Himmels willen. Warum kümmert es AppleScript, wenn ich vergesse, ein doppeltes Anführungszeichen in einem Kommentar zu schließen ?

Diese Anforderung wird auch nicht im AppleScript Language Guide - Comments erwähnt .

Wenn Sie neugierig sind, ich habe es gerade getestet, und Sie dürfen ein einfaches Anführungszeichen in einen Kommentar setzen, ohne ihn zu schließen. Zum Beispiel,

(* 'This is the text that I want to display *)

erzeugt keinen Fehler.


Wie auch immer, um meine ursprüngliche Frage zu beantworten:

Gibt es eine Methode oder Anwendung, die mich über die genaue Codezeile informieren kann, die für den Fehler verantwortlich ist?

Es gelang mir, heuristisch an eine Methode zu denken. Es ist verrückt einfach, und für viele Leute ist es wahrscheinlich offensichtlich, aber es ist mir nie in den Sinn gekommen, als ich stundenlang Zeile für Zeile las und nach dem fehlenden suchte *).

Mit der folgenden Methode habe ich in weniger als 5 Minuten die genaue Codezeile gefunden, die für den Fehler verantwortlich ist :

  1. Erstellen Sie eine neue, leere AppleScript-Datei.

  2. Kopieren Sie eine Hälfte Ihres Codes in die neue Datei.

    1. Wenn dieser Code einen Fehler erzeugt, löschen Sie eine Hälfte dieses Codes. Kompilieren Sie den Code.

      1. Wenn dieser Code immer noch einen Fehler erzeugt, dann löschen Sie eine Hälfte dieses Codes. Kompilieren Sie den Code.

      2. Wenn dieser Code keinen Fehler mehr erzeugt, klicken Sie auf die Schaltfläche Rückgängig und löschen Sie die andere Hälfte des Codes. Kompilieren Sie den Code.

    2. Wenn dieser Code keinen Fehler erzeugt, klicken Sie auf die Schaltfläche Rückgängig. Kopieren Sie dieses Mal die andere Hälfte des ursprünglichen Codes (d. h. kopieren Sie die Hälfte, die Sie beim ersten Mal nicht kopiert haben).

Du hast die Idee. Sie halbieren den Code im Grunde (durch Versuch und Irrtum), bis Sie den Fehler auf eine einzige Codezeile isolieren können. Es muss einen Fachbegriff für diese Methode geben, aber ich kenne den Begriff nicht.

Sie haben letztendlich genau das getan, was ich getan hätte, wenn Sie den Code hochgeladen hätten. Ich habe darüber nachgedacht, Ihnen etwas über die Half-Split-Methode zur Fehlerbehebung zu erzählen, die allgemein als Teile-und-Herrsche-Ansatz bekannt ist, aber ich hätte die Ursache der Fehlermeldung schneller finden können, als zu erklären, was zu tun ist. :)
Ah schön. Danke für das Teilen des Begriffs. Können Sie eine Theorie / Spekulation darüber anbieten, warum die AppleScript-Sprache nicht ausgeführt wurde, wenn man vergisst, ein doppeltes Anführungszeichen in einem Kommentar zu schließen? Weil es mir unsinnig erscheint, in einem Kommentar ein schließendes doppeltes Anführungszeichen zu verlangen .
Da müssten Sie als Apple darüber nachdenken. Der Skripteditor ist im Vergleich zu der von anderen Sprachen verwendeten IDE etwas lahm.