Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
keman •->


Anmeldedatum: 02.04.2006 Beiträge: 8
|
Verfasst am: 02.04.2006 - 21:49 Titel: Interpret mit AppleScript |
|
|
Hab einmal gedacht, einen Interpreten mit AppleScript zu schreiben, ich hab also meine Programmmiersprache mal FScript genannt. Hier der vollständige Code des Interprets: http://mitglied.lycos.de/keman/main.scpt
Ich erkläre kurz die Grundlagen meiner einfachen Programmiersprache, damit mein Problem deutlicher wird:
Eine FScript-Datei muss *.format gespeichert werden. Mehrere Befehle werden durch Zeilenumbrüche getrennt. Der erste Befehl muss immer #<fscript> sein. Eine FScript-Datei muss mit dem Editor erstellt werden (Link oben)!
DISPL hello world
erzeugt eine MessageBox, in der hello world steht.
?SET? hallo%4
definiert eine Variable mit dem Index 4 und dem Wert hallo. Variablen haben keine Namen sondern nur einen Index, es gibt also Variable 1, Variable 2 etc. Die beiden Parameter hallo und 4 werden durch das %-Zeichen getrennt.
DISPL Die erste Variable ist &0001 und die fünfzehnte &0015
erzeugt eine MessageBox mit den Variablen mit dem Index 1 und 15.
Es gibt noch ziemlich viele weitere Befehle, die ich jetzt nicht erklären werde. Auf jeden Fall wäre es in meiner Programmiersprache praktisch, eine externe *.format-Datei von einer anderen *.format-Datei auszuführen. Deshalb hab ich diesen Befehl entwickelt:
?SUB? datei1.format
Sollte theoretisch die Datei datei1.format ausführen, die sich im home/FScript-Ordner des Users befinden sollte. Dies hab ich in AppleScript so gelöst:
else if command is "?SUB?" then
tell application "Finder"
set theStarter to "FScript:" & p1 & ""
--p1 ist der erste Parameter des Befehls ?SUB?
set thePath to the file theStarter in the home
set mpmp to "" & thePath & ""
set aber to read file mpmp
compile(mpmp, 2)
-- Der erste Parameter von compile() ist der FScript-Code, der ausgeführt werden sollte, der zweite ist total unwichtig.
end tell
Wie schon gesagt, sollte man sich vielleicht den ganzen Code anschauen, hier:
http://mitglied.lycos.de/keman/main.scpt
Kann mir da jemand helfen, wenn ich nämlich folgende FScript-Datei ausführen will, kommt immer compile() konnte nicht ausgeführt werden.
#<fscript>
?SUB? datei1.format
Die Datei datei1.format exisistiert tatsächlich. Aber wieso kommt immer eine Fehlermeldung? Ich verstehe das einfach nicht. |
|
Nach oben |
|
 |
hweber •--->

Anmeldedatum: 01.02.2004 Beiträge: 397
|
Verfasst am: 02.04.2006 - 22:15 Titel: |
|
|
hallo keman, bist du sicher, daß du eine frage an dieses APPLE_SCRIPT_FORUM stellen möchtest? |
|
Nach oben |
|
 |
Wolle-77 •--->


Anmeldedatum: 25.02.2003 Beiträge: 448 Wohnort: Geldern
|
Verfasst am: 03.04.2006 - 12:29 Titel: Verstehe den Sinn nicht |
|
|
Hallo keman,
ich wollte Dir nur mitteilen, daß ich den Sinn nicht verstehe, den Du mit Deinem "Interpreten" bezweckst.
Wieso erstellst Du nicht ein konkretes Projekt? Wieso versuchst Du etwas umzusetzen, was scheinbar nur dem Selbstzweck dient — und obendrein noch wesentlich komplizierter zu benutzen und wesetnlich unflexibler als das Original ist?
Ich mein, keiner kauft sich vier Möbelroller mit je einem drangebastelten Elektromotor bei seinem Auto dazu, um das Auto dann auf diese zu stellen und dann mit Batteriestrom zu fahren...!?
Zu Deiner Frage: Erstmal würde ich mir einen anderen Namen für Deine Routine überlegen als compile. Den Befehl gibt es nämlich. Dann: Was für eine Fehlermeldung kommt denn? Deine eigene? "Script Error"? Dann ist es ein Problem, welches Du lösen mußt und welches Du nicht auf AppleScript schieben kannst. Schließlich legst Du die Auswahlbedingungen fest. Setze schon mal an beim "if command is" — SUB ist ja nicht der Befehl, sondern der Befehl enthält nur SUB.
Aber wie gesagt, ich würde das Projekt einstampfen und die Zeit sinnvoller nutzen. Lerne doch erstmal gut mit AppleScript umzugehen. Ich denke, Du versaust Dir Deinen Programmierstil total, wenn Du Dich in ein selbstgeschaffenes "Reich" katapultierst. Gibt nämlich bei dem Spaghetticode schon allein genug Verbesserungspotential.
Sorry, aber ich würde was Anderes machen. _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
 |
keman •->


Anmeldedatum: 02.04.2006 Beiträge: 8
|
Verfasst am: 03.04.2006 - 16:18 Titel: |
|
|
Eure Antworten machen mich ein bisschen wütend. Das ganze Programm ist 1658 Zeilen lang!!!! Da muss ich irgendwelche komische Variablennamen erfinden. Die Programmiersprache FScript ist auch schon recht verbreitet, dank mir. Hier das einfachste Sub-FScript-Programm:
Code: | #<fscript>
?SUB? function.format |
Jetzt sollte die Datei function.format interpretiert werden! Und das passiert auch. Er kommt zum Befehl ?SUB?. Und danach bis zu "compile()". Und dann kommt die Fehlermeldung:
Finder hat einen Fehler erhalten.
Compile konnte nicht ausgeführt werden.
Die Fehlermeldung stammt nicht von mir. Und bevor ihr sagt, ich kann nicht mit AppleScript umgehen, schaut euch den ganzen Code mal an. Und was habt ihr dagegen, dass ich das ins AppleScript-Forum poste??
Gruss
Keman |
|
Nach oben |
|
 |
keman •->


Anmeldedatum: 02.04.2006 Beiträge: 8
|
Verfasst am: 03.04.2006 - 16:21 Titel: |
|
|
Ach übrigens (man kann hier nicht editieren!!!): Die Routine compile gibt es nicht, sonst wäre sie vom Scripteditor blau gefärbt worden, sie wird aber grün gefärbt (liegt eben daran, dass sie zwei Parameter braucht). Und die Variable command sind die ersten fünf Zeichen des Befehls, also eben doch tatsächlich "?SUB?". |
|
Nach oben |
|
 |
hweber •--->

Anmeldedatum: 01.02.2004 Beiträge: 397
|
Verfasst am: 03.04.2006 - 16:50 Titel: |
|
|
hallo keman,
daß du bei den bisherigen antworten frostig bist, kann ich verstehen; andererseits, wenn du hier im forum herumblätterst, wirst du schnell herausfinden, daß deine anfrage schon etwas anders ist, als das was hier in der regel passiert. Ich glaube, die meißten hier - ich schließe mich mit ein - verstehen gar nicht, woran du arbeitest.
Manchmal hilft hier auch ein wenig geduld und dann findet sich doch noch jemand, der bei dir mit macht.
h |
|
Nach oben |
|
 |
keman •->


Anmeldedatum: 02.04.2006 Beiträge: 8
|
Verfasst am: 03.04.2006 - 17:35 Titel: |
|
|
Das Problem ist einfach, dass ich seit zwei Wochen an diesem Punkt stehen bleibe und keine Lösung finde. Ausserdem, was ist an meiner Anfrage so komisch? _________________ Gruss
Keman |
|
Nach oben |
|
 |
hweber •--->

Anmeldedatum: 01.02.2004 Beiträge: 397
|
Verfasst am: 03.04.2006 - 17:42 Titel: |
|
|
mit folgendem kleinen script wird die ausgewählte datei mit der dazugehörigen application geöffnet, vielleicht hilft dir das weiter, denn - wie gesagt - ich verstehe nicht wirklich, was du da machst
Code: | set meine_datei to choose file
set pfad_zu_meiner_datei to POSIX path of meine_datei
do shell script "open " & pfad_zu_meiner_datei |
h |
|
Nach oben |
|
 |
till •--->


Anmeldedatum: 21.04.2005 Beiträge: 187 Wohnort: q-town (R-P)
|
Verfasst am: 04.04.2006 - 00:05 Titel: |
|
|
1. ) was is das ? http://mitglied.lycos.de/keman/
2. ) lad die datei - http://mitglied.lycos.de/keman/main.scpt - mal als zip oder so hoch - wei mein safari zeigt mir mal wieder nur hiroglyphen an! und anders komm ich nid ran! _________________ ein berühmter Philosoph (<-Ich) sagte einmal:
" es ist nicht das Problem was uns Kopfzerbrechen macht,
es ist der Kopf selbst, der sich erdrückt" |
|
Nach oben |
|
 |
Wolle-77 •--->


Anmeldedatum: 25.02.2003 Beiträge: 448 Wohnort: Geldern
|
Verfasst am: 04.04.2006 - 11:03 Titel: Weiteres zu "FScript" |
|
|
Erstmal zu Till: Wie wäre es, wenn Du dem Safari mal sagst, was er mit der Datei machen soll? Wenn Safari meint, daß .scpt eine Textdatei ist, womit er vollkommen recht hat übrigens, dann sage ihm halt, daß Safari dies als Datei speichern soll. Zur Not machst Du das gleiche mit Firefox, der holt die Datei direkt runter.
So, dann nochmal zu Keman. Du scheinst davon sehr überzeugt zu sein; von der Sache ansich und vom Konzept des Programms. Nun, ich bleibe dabei, ich erkenne den Sinn nicht.
Wenn Du wirklich eine einfache Scriptsprache neu schreiben willst, Programmiersprache ist es ja nicht, da grundlegende Dinge einfach nicht existieren (Stichwort Schleifenbildung, bestimmte Handler, viele Befehle, die man bräuchte), dann ist es meine Meinung, kommt man um einen leicht zu bedienenden Editor erstens nicht umher; also wird das ein XCode-Projekt und zweitens sollte dann doch auch die Syntax der Sprache einfachst gehalten sein -- und nicht Strukturen von Perl und C und Basic vermischen und ein abstraktes Denken voraussetzen (Stichwort: Variablenindex).
Du machst ja nichts anderes, als zu interpretieren. Wenn der Befehl gelesen wird, dann mache das... und "das" setzt Du wiederum mit normalen AppleScript-Befehlen um.
Ich habe mich mal erkundigt, ob FScript irgendjemandem irgendwo ein Begriff ist.
Dabei habe ich folgende, grundsätzlich ablehnende Kommentare gefunden:
Nun, das hier scheint ein Namensvetter zu sein:
http://www.fscript.org/
Auch das hier sieht für mich nach etwas Anderem aus:
http://fscript.sourceforge.net/fscript/page1.html#link0
Im Übrigen gibt es das auch für die DOSe, also haben sich auch andere Leute daran versucht:
http://www.gmdsoft.de/gmd/index.php?site=programs&nav=fscript
So, dann hast Du offenbar auch andere Foren mit Deinem Problem konfrontiert. Zu Deinen Aussagen hier
http://www.apfeltalk.de/forum/interpret-mit-applescript-t35819-2.html
kann und möchte ich Dir mal folgendes sagen:
Unter OS 9 beispielsweise konnte der Scripteditor nicht mehr als 32 K Code verpacken, weswegen solche Methoden wie do script oder load script nötig waren.
Aber ansonsten: Was soll bitteschön an 1.680 Codezeilen besonders sein? Mein Programm Mailmirdas, welches ich zur Zeit nicht weiterentwickle, wen es interessiert, hier zu bekommen:
http://software.wolle77.de
hat über 2.200 Zeilen. Und ich füge grundsätzlich keine Leerzeilen und masige Kommentare ein, so wie Du.
Also, Dein Code ist absolut nicht so lang, daß der Editor deshalb Probleme bekommt.
Und noch etwas: Bei mir wird compile blau eingefärbt! Deshalb habe ich Dir das auch geschrieben.
So, hier habe ich dann etwas zu Deinem FScript gefunden:
http://www.piranho.com/home/workshops/showworkshop.php?xid=5e159b561ed03eaedf0149839973ada4&cat1=4&cat2=1&id=3502
Naja, und da kann ich mich vom Kommentar von terra1, "Armseliges Halb-Basic" irgendwie sinngemäß anschließen.
Daher nochmal meine Frage: Was ist der Sinn von FScript? Damit kann doch keiner etwas lernen? Und wer soll sonst diesen Aufsatz benutzen?
Allein hier:
Code: |
else if command is "DSKTP" then
if p1 is "" then
tell application "Finder"
set the desktop picture to choose file
end tell
else if p1 is " " then
tell application "Finder"
set the desktop picture to choose file
end tell
else
try
tell application "Finder"
set the desktop picture to p1
end tell
on error e
tell application "Finder"
set the desktop picture to choose file
end tell
end try
end if
|
wird es mir anders. Was hältst Du davon, den Code eines Interpreters mal ein wenig intelligenter zu halten... Beispielsweise so:
Code: | else if command is "DSKTP" then
if p1 is "" or p1 is " " then
tell application "Finder" to set the desktop picture to choose file
else
try
tell application "Finder" to set the desktop picture to p1
on error
tell application "Finder" to set the desktop picture to choose file
end try
end if
|
Das ist der gleiche Ausschnitt, zusammengefaßt. Dann aber habe ich direkt die Einwände, daß das grundsätzlich schlechter Programmierstil ist. Erstens:
Jemand, der Deiner Sprache eine ungültige Anweisung gibt, den Bildschirmhintergrund zu ändern, bekommt ohne Warnung einen Auswahldialog vorgeknallt. Er weiß gar nicht, warum- Und nur, weil Du einen error des Finders abfängst und dann einfach ohne Benutzerinteraktion ihm dann den Dialog vorsetzt. Was ist, wenn die Datei einen Fehler schmeißt?
Ein Interpreter sollte ja wohl wirklich nur strikt interpretieren und bei einem Error den Befehl mit Fehler angeben.
Dann fängst Du aber nicht mal den in e geloggten Fehler ab... Und was soll überhaupt das "" und " "? Möchtest Du damit verhindern, daß evtl. erfaßte Leerzeichen erkannt werden?
Wie wäre es mit einem generellen Such-Tausch von allen Zeichen, die nicht erlaubt sind zu "" und dann einer Prüfung auf ""?
Dann schreibst Du ja auch provozierend, daß wer behaupte, Du solltest erstmal AppleScript verstehen, sich den Code anschauen soll.
Das habe ich auch gemacht und kann Dir alleine hier:
Code: |
if (get character counting of nowLine) is "%" then
if type is 0 then
set type to 1
set counting to counting + 2
else if type is 1 then
set type to 2
set counting to counting + 2
else if type is 2 then
set type to 3
set counting to counting + 2
else if type is 3 then
set type to 4
set counting to counting + 2
else if type is 4 then
set type to 5
set counting to counting + 2
else if type is 5 then
set type to 6
set counting to counting + 2
else if type is 6 then
set type to 7
set counting to counting + 2
else if type is 7 then
set type to 8
set counting to counting + 2
else if type is 8 then
set type to 9
set counting to counting + 2
else if type is 9 then
set type to 10
set counting to counting + 2
else if type is 10 then
set type to 11
set counting to counting + 2
else if type is 11 then
set type to 12
set counting to counting + 2
else if type is 12 then
set type to 13
set counting to counting + 2
end if
end if
|
sagen, daß nur dieser kleine peinliche Ausschnitt auch erstens schneller, kürzer und ressourcenschonender so zu lösen ist:
Code: | if (character counting of nowLine) is "%" then
set type to type + 1
set counting to counting + 2
end if
|
(Übrigens brauchst Du nicht bei jedem Befehl einen end if einbauen:
Code: | if (character counting of nowLine) is "%" then set type to type + 1
|
...und von solchen Codeblasen strotzt der ganze Code. Da ist es kein Wunder, daß Du auf diese Anzahl von Zeilen kommst.
Also, ich bleibe dabei, je mehr ich darüber nachdenke, das ist grundsätzlich Murks, mir fallen immer mehr Ungereimtheiten ein und auf. Laß es sein, optimiere Deinen Stil ansich bzw. übe an anderen Projekten.
Ich werde zu dem Thema nichts Weiteres mehr sagen, aber für mich ist das komplette und unsinnige Zeitverschwendung. _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
 |
keman •->


Anmeldedatum: 02.04.2006 Beiträge: 8
|
Verfasst am: 04.04.2006 - 14:21 Titel: |
|
|
Ihr habt recht, ich hab's aufgegeben. Hat jetzt nicht mit AppleScript zu tun, aber hab einen neuen Interpret begonnen zu schreiben, mit Java diesmal. Editor mit highlight, und keine Basic-Befehle wie in FScript. Man kann if-Abfragen erstellen, while/for-Schlaufen, Variablentypen, Arrays, Funktionen, Classes etc. _________________ Gruss
Keman |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de
|
|
|