Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: VzEkC e. V.. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Toast_r

2. stellvertr. Vorsitzender

  • »Toast_r« ist männlich

Beiträge: 4 238

Wohnort: 51.32,6.48544

Lieblingscomputer: CBM 720

  • Nachricht senden

31

Samstag, 18. März 2017, 12:14

Puh ...
:=, == und ?= halte ich ja mal für völlig abwegig.
Das ganze soll doch BASIC sein, und nicht CASIC oder PASIC ...

Beiträge: 630

Wohnort: Dresden (nahebei)

Lieblingscomputer: Acorn RISC OS + +4

  • Nachricht senden

32

Samstag, 18. März 2017, 12:35

Na ja, war ja auch nur ein Vorschlag. Das Grundproblem bleibt aber, daß der Mensch da zwei unterschiedliche Dinge mit einem Symbol versieht, was aber so ein Compiler nicht gut differenziert bekommt. ( Zuweisung vs Vergleich )
Und ":=" ist doch zumindest in DLand bei den ganzen alten TurboPascal-Recken bestens etabliert.

( ich setz jetzt mal noch einen drauf ... ;) ... das coole an "?=" ist nämlich, daß da im Symbol noch Platz für eine Vergleichsrichtung ist. Keine Ahung ob man sowas für irgendwas braucht, aber oft hat man ja bei Vergleichen die Vorstellung von einem Wert, den man in Bezug zu was anderem setzt, was man daraufhin untersucht inwieweit das zu Vergleichende zum Ersten paßt ( ob es größer oder kleiner oder schwerer oder bunter ist ). Da heißt der Verglich hat, zumindest oft, in unserer Vorstellung eine Richtung. Und genau das könnte ein "?=" abbilden; wenn man es umkeht schreibt man einfach "=?" und vergleicht damit "andersherum".
OK. Dürft ihr wieder vergessen. Ziemlich unausgegorener Unfug und im allgemeinen unnötig - aber eben eigentlich nicht in Computersprachen aus der üblichen Riege (C, Pascal, Basic) abbildbar. )

Ich fand das ":=" / "=" System von Pascal immer ziemlich eingängig , dagegen das "=" / "==" C Geschreibsel leicht eigenartig. Richtig gut fände ich halt eine Version, wo das "=" gar nicht mehr für Verwirrung sorgt - darum der Vorschlag ":=" / "==" oder alternativ ":=" / "?=". Die Noatation ist dabei eigentlich egal, nur das Problem der Uneindeutigkeit sollte behoben werden. ( OK - mit LET bekommt man das auch hin, aber das ist halt so "uralt" und bißchen Weiterentwicklung schadet ja nix, gerade wenn's jemand quasi komplett neu aufbaut. )

Workaholic

unregistriert

33

Samstag, 18. März 2017, 12:36

Sehr interessante Anmerkungen, vielen Dank dafür. Also LET kann ich auch nicht mehr wirklich sehen

Edit: Menno. Wieder der Text weg. Ivh antworte nachher nochmal, wenn ich am Computer bsitze. Handy idt mist. Der überträgt nicht den ganzen Text...

Toast_r

2. stellvertr. Vorsitzender

  • »Toast_r« ist männlich

Beiträge: 4 238

Wohnort: 51.32,6.48544

Lieblingscomputer: CBM 720

  • Nachricht senden

34

Samstag, 18. März 2017, 12:43

Hmm ... eine Uneindeutigkeit des = kann ich erstmal nicht nachvollziehen.
Kannst Du das nochmal erläutern?

Beiträge: 630

Wohnort: Dresden (nahebei)

Lieblingscomputer: Acorn RISC OS + +4

  • Nachricht senden

35

Samstag, 18. März 2017, 13:05

Hmm ... eine Uneindeutigkeit des = kann ich erstmal nicht nachvollziehen.
Kannst Du das nochmal erläutern?


Ich kanns probieren.

Der Rechner hat zwei unterschiedliche Sachen, die er machen kann, wenn wir ein "=" aufschreiben würden. Uns ist i.a. völlig klar, was in der jeweiligen Situation gemeint ist. Dem Compiler nicht, der kann probieren, das rauszubekommen, indem er das "Umfeld des Kommandos" berücksichtigt, was aber mit Unsicherheiten versehen ist - oder Variante 2, man schreibt es ihm halt einfach dazu, was gemeint ist. ( Wie man das macht ist eben genau das Problem, wo sowas lesbarer Code wird oder komisch aussieht. )

Die zwei Fälle sind:
1.) "Variable% = Wert" , also z.B. A%=23 . Da soll der Computer einen freien Speicherplatz suchen, den für später freihalten und merken, damit er den Variableninhalt wiederfindet und den Wert 23 in die Speicherzelle schreiben. Dagegen Fall
2.) "Variable% = Wert" in einem Vergleich ( Merke: Gleiche Schreibweise!) , also z.B. IF A%=23 THEN Counter%=Counter%-1 ; hier soll der Computer schauen, ob der Wert der Variablen A% übereinstimmt mit der 23, die der zu vergleichende Wert ist.

In Fall 1.) Kommt da sowas raus wie ( LDA #$23 ; STA $2000 ; weiter)
In Fall 2.) ( CMP #$23 ; BEQ Label_Treffer_A_ist_genau_23 ; weiter )



Wozu ist das noch gut - oder anders gefragt : Warum kein LET ? Man kann dann Zuweisungen schön in Klammern machen und so Konstrukte schreiben wie
DO Countervariable% UPTO ( Maximalwert% := 23 ) ... LOOP

Da hast Du jetzt quasi alles mit drin. Die Zuweisung in der Klammer und dann innerhalb der Schleife bei jedem Schleifendurchlauf einen ( impliziten ) Vergleich von ( Countervariable% = Maximalwert% ) ? , wenn ja Schleife zu Ende.

Mit LET würde sowas so aussehen
DO Countervariable% UPTO ( LET Maximalwert% = 23 ) ... LOOP

Workaholic

unregistriert

36

Samstag, 18. März 2017, 13:11

Uneindeutig wäre es bei

a=5
a=5 goto hallo

Aber deswegen fängt ein Vergleich mit IF an. Oder verstehe ich jetzt was falsch? Der Compiler soll zu später LET anspringen wenn er sonst nichts erkennt. Das sollte zumindest LET überflüssig machen.

So, nachher kommt dann die ausführliche Antwort

Peter z80.eu

Z80 Anbeter

  • »Peter z80.eu« ist männlich

Beiträge: 1 314

Wohnort: Mainz Umgebung

Lieblingscomputer: Kaypro 4

  • Nachricht senden

37

Samstag, 18. März 2017, 19:50

Das LET braucht man nicht. Ein lexikalischer Parser mit vorgebener Semantik schafft es mit Leichtigkeit, bei vorangestelltem IF ein Vergleich von einer Zuweisung zu unterscheiden.
Kauft Euch mal das wirklich gute Buch "Compilerbau" von Nikolaus Wirth (da ist in der ersten Auflage ein kleiner PASCAL Compiler im Source drin, in der letzten Auflage ist das ein Oberon Compiler geworden). Der Herr Wirth hat seine Programmiersprachen in Baccus-Naur-Form (BNF) oder in erweiterter BNF dargestellt, das kann man recht leicht in 1:1 für einen Compiler (aber auch für ein Interpreter) umsetzen.
"Wäre das Pferd eine Katze gewesen, dann wäre es den Baum hochgeritten" --- Und schaut auch mal bei meinem Blog vorbei ...

Workaholic

unregistriert

38

Samstag, 18. März 2017, 21:06

Ich versuche gerade, dass der Compiler das LET automatisch ausführt, wenn er sonst keine Anweisung erkennt. Fehlt das typische Variablen-Kennzeichen, das "=" oder sonst etwas, gibt es halt einen Fehler. :-)

Noch etwas zu INC und DEC aus dem BDOS-Handbuch: Die Befehle ADD/SUB usw. sind nichts anderes als entprechende CPU-Befehle, daher liefern die auch die entsprechenden Ergebnisse.
Soll heißen: Ist eine ENV-Var = 65535 und man führt ein INC aus, dann kommt 0 heraus, beim nächsten INC eine 1 usw. gleiches gilt auch für DEC (nach 0 kommt 65535, dann 65534 usw.).
Gleiches gilt natürlich für ADD/SUB usw. Es sind vorzeichenlose Integer (Words).

Das mit dem Passwort kann ich ja noch ändern. Das mit den Zahlen hat sich einfach so ergeben und nachdem man das Passwort normal gar nicht braucht (außer man versieht Dateien/Ordner mit dem Admin-Attribut), habe ich da nicht lange überlegt :-)

Beiträge: 630

Wohnort: Dresden (nahebei)

Lieblingscomputer: Acorn RISC OS + +4

  • Nachricht senden

39

Sonntag, 19. März 2017, 13:13

INC / DEC - wenns so funktioniert, ist es quasi "üblich" und sicher gut wie es ist.

Das Testen auf LET würde man sich mit einem definierten Zuweisungssymbol eben komplett sparen. Und den Test auf IF ist genau das was ich mit "... indem er das "Umfeld des Kommandos" berücksichtigt, ..." gemeint hatte. Beides wird schlicht unnötig, wenn es schon per Symbol klar ist, was gemeint ist. Hauptvorteil ist aber erstmal nur das vereinfachte Lesen. ( das Codeparsen vereinfacht es aber auch )

Und noch was Lustiges, was vielleicht Sinn macht, da Du ja anscheinend auch kleine kurze Assemblerstückchen schreibst für Befehle - guck Dir mal das Konzept von TAOS an ( war um die Jahrtausendwende herum mal angedacht als nächste Iteration des Amiga OS anzutreten, hat aber nicht geklappt ). Da gibt es so eine sehr interessante und flexible Trennung zwischen Befehl und letztlich ausgeführtem Code.

Ähnliche Themen

Thema bewerten