Ich entwerfe und implementiere gerade eine kleine Programmiersprache als ein Extra-Kredit-Projekt in einer Klasse, die ich mache. Mein Problem ist, dass die Sprache drei numerische Typen hat: Long, Double und Fraction. Brüche können in der Sprache als richtige oder unechte Brüche (z.B. "2 1/3" oder "1/2") geschrieben werden. Diese Tatsache führt dazu, dass Probleme wie "2 / 3.5" (Long / Double) und "2/3" (Long / Long) vom Lexer nicht korrekt behandelt werden. Die beste Lösung, die ich sehe, ist das Ändern des Divisionsoperators. Bisher denke ich "\" ist die beste Lösung, da "//" Kommentare startet.
Würdest du "\" wählen, wenn du die Sprache entworfen hättest?
Würdest du etwas anderes aussuchen? Wenn ja, was?
Hinweis: Das Ändern der Art, wie Brüche geschrieben werden, ist nicht möglich.
Vielen Dank im Voraus für Ihre Hilfe,
-EDIT -
Aktuelle Operatoren sind:
**
(Leistung)
*
(multiplizieren)
%
(Modul)
+
(hinzufügen)
-
(Subtrahieren und Negieren)
~
(reziprok)
!
(NICHT)
>
(größer)
<
(weniger)
>=
(größer-gleich)
<=
(weniger gleich)
==
(Gleichheit)
<>
(Ungleichheit)
&
(AND)
|
(OR)
^
(XOR)
??
(Null-Koaleszenz)
=
(Zuweisung)
Hinweis: Ich habe keine streng verbindlichen Anforderungen von meinem Lehrer; Ich habe ihn jedoch überzeugt, dass ich einen einfachen Bruchrechner in eine Sprache umwandeln kann. Die Änderung der Fraktionssyntax würde gegen die Fraktionssatz-Syntax für Brüche gehen, die vorzugsweise vermieden wird.
Ich bin nicht ganz sicher, was das Problem ist, da ich Grammatiktheorie nicht kenne. Aber ich würde versuchen, die richtige Bruchteilsyntax zu ändern, z. zu 2_1/3
, mit Unterstrich statt Leerzeichen.
Über die Verwendung von \
als Divisionsoperator - ich würde es sicherlich nicht mögen, da es in fast jeder Sprache als Escape-Zeichen verwendet wird. Ich würde solch eine Überladung von Bedeutungen nicht empfehlen.
Ermöglichen Sie kompakte if-Anweisungen wie
%Vor%in deiner Grammatik? Wenn nicht, könnten Sie ": " als Bereichsbetreiber verwenden. Es ist schließlich das übliche mathematische Symbol für die Teilung (von Hand, auf Papier) an vielen (den meisten?) Stellen rund um das Wort.
Ein weiterer Grund, die Verwendung von \
als Ersatz für /
zu vermeiden, liegt darin, dass Verwirrung darüber entstehen kann, welcher Operand der Zähler ist und welcher der Nenner ist. Zum Beispiel enthalten MATLAB-Arithmetikoperatoren die rechte Division /
und linke Abteilung \
. Der Wert von 1/2
ist 0,5, der Wert von 1
ist jedoch 2. Mit anderen Worten, /
hat den Zähler links und \
hat den Zähler rechts.
Wenn es für einen Kurs ist, würde ich einfach ein Schlüsselwort wie dividedby
verwenden. Andernfalls müssen Sie herausfinden, was /
durch seinen Kontext bedeutet. Es gibt wirklich keine anderen einzelnen Zeichen, die geeignet sind.
Beachten Sie jedoch, dass Ihr Lehrer Sie möglicherweise bittet, das kontextabhängige Problem zu lösen. In diesem Fall möchte er, dass Sie den Schrägstrich verwenden. Ich würde fragen.
Ich würde \
wie verrückt vermeiden, da dies die Erwartungen der Menschen durcheinander bringen würde.
Ich würde fortfahren und /
verwenden, aber das Problem aus dem Lexer heraus und in den Parser bringen, wo es einfacher ist, mit ihm umzugehen und Sie können sinnvolle Fehlermeldungen ausgeben.
Wie wäre es, Brüche zum primären Datentyp zu machen? Denken Sie an den Divisionsoperator als Infixkonstruktor?
Tags und Links programming-languages design division operator-keyword