Hallo Programmiersprache: Beginn des Designs

Wir fangen an, die Programmiersprache Hi zu entwerfen . Hier finden Sie eine Einführung und einige Antworten auf Fragen, warum dies erforderlich ist. Sprachdesign ist jedoch ohne guten Grund eine ungewöhnlich interessante Aufgabe, wenn Sie es ernst nehmen.



Nach unserer These von maximaler Zugänglichkeit für das Lernen werden wir versuchen, alle Grundelemente der Sprache aus den weit verbreiteten Elementen anderer algorithmischer Sprachen logisch zu integrieren. Hier folgen wir der internen Logik des ersten Artikels und der Annahme, dass die Zusammensetzung der Entitäten mehrerer populärer Sprachen das Erfassen neuer Inhalte mit weniger Aufwand erleichtert, da die Benutzer über eine integrierte Integrationsmaschine verfügen, die auf neuronalen Netzen basiert und automatisch Verstöße gegen die Semantikparts einführt. soobscheni.



Die Idee, aus bereits bekannten Elementen neue Sprachen zu konstruieren, hat eine lange Geschichte. Vor mehr als 140 Jahren schuf Dr. Zamenhof die künstliche Sprache des Esperanto aus den Bestandteilen anderer natürlicher Sprachen. Die Sprache erwies sich als so logisch und leicht zu erlernen, dass sie sich als lebensfähig erwies und bis heute überlebte. Zum Beispiel ist es in Google Übersetzer verfügbar. Saluton Habr! Bonvenon sub la kat!



Lassen Sie uns versuchen, eine Sprache zu entwerfen, die für die schnelle Programmierung von intellektuellen Spielen und Rätseln geeignet ist und deren Verwendung aufgrund ihrer Konsistenz und Nachdenklichkeit gefallen wird .



Bemerkungen



Verwenden Sie für einen einzeiligen Kommentar das Symbol # (Python, R, Ruby). Die Kombination // (C und viele andere Sprachen) kann als ganzzahliger Divisionsoperator verwendet werden, um das Ergebnis einer Operation als reelle Zahl zu erhalten, um in diesem Fall keinen etwas umständlichen Konvertierungsausdruck wie CGFloat (int) wie in Swift zu verwenden.



PRINT “Hi world\n”
#  Hi world     


So markieren Kommentare mehrzeiligen, verwenden Sie die ## - Kombination .

##   .
,      Python ##


Die Wahl des # -Symbols ist auch praktisch, da es in Zukunft vom Hi-Sprachinterpreter verwendet wird, um Meta-Tags im Programmtext zu verarbeiten , die aus dem Kommentartext synthetisiert werden können. Dies ist ein bisschen wie der Präprozessor in C / C ++, der übrigens auch das Symbol # verwendet.



Elementare Datentypen



Die Hi-Sprache in der Basisausgabe verwendet drei elementare Datentypen:



Binär: BOOL

Mögliche Operationen: & (und), | (oder), ~ (nicht)

LET true = TRUE 
LET false = FALSE
PRINT true & true   #  TRUE
PRINT true | false   #  TRUE
PRINT ~true   #  FALSE


Ganzzahlen: INT

Mögliche Operationen: + , - , * , / (Ganzzahldivision), % (Rest), // (Division mit automatischer Konvertierung des Ergebnisses in den REAL-Typ)

VAR i = 0
PRINT (i + 6 – 2) * 3 / 5   #  2


Reelle Zahlen: REAL

Mögliche Operationen: + , - , * , /

VAR pi = 3.1415926535


Saiten



Zeichenfolgen sind ein zusammengesetzter Typ, da sie als Zeichenfolge von Unicode-Zeichen behandelt werden

LET the_force = “flow through you”


Wir verwenden keine einfachen Anführungszeichen für Zeichenfolgenliterale, da Zeichen, insbesondere solche auf der Standardtastatur, eine wertvolle Ressource für die Zukunft sind.

Standard-String-Operationen:

# 
VAR language = “C”
LET statement  = “ – the best language ever”
LET proposition = language + statement
language = “Python”


Im Moment müssen wir keinen Datentyp vom Typ Zeichen einführen. Um praktische Probleme zu lösen, können Sie ...

#    
LET secondSym = language[2]


Das Ergebnis der Zuweisung für den Fall, dass die Referenz durch den Index außerhalb der Zeichenfolge liegt, ist "" und führt nicht zu einem Laufzeitfehler.



Konstanten und Variablen



Wie wir in den obigen Beispielen gesehen haben, ist Hi eine statisch typisierte Sprache , um die Wahrscheinlichkeit von Fehlern bei der Verwendung von Bezeichnern zu verringern und deren Zweck besser zu verstehen. Konstanten ( LET ) und Variablen ( VAR ) müssen vor der ersten Verwendung des Objekts deklariert werden. Es ist ergonomischer, Typen zu deklarieren, ohne einen bestimmten Typ explizit anzugeben, indem Anfangswerte zugewiesen werden. In diesem Fall wird die Typinferenz offensichtlich.

##  
LET one: INT = 1  : ##
LET one = 1
VAR boolean = TRUE


Das Konzept der Deklaration von Konstanten und Variablen let und var ist von Swift entlehnt. In Hi ist es jedoch möglich, mehrere Deklarationen mit der Zuweisung eines Werts durchzuführen:

VAR i, j, k = 0


Standardeingabe und -ausgabe



Die Dateneingabe über die Tastatur erfolgt mit dem Befehl INPUT :

VAR startFrom: INT
PRINT "Start from: "; INPUT startFrom


Sie müssen weder true noch false eingeben, um einen BOOL-Wert einzugeben. Die mobile Programmieranwendung, die wir für die Veröffentlichung im AppStore vorbereiten, ist intelligent genug, um in diesem Fall nur zwei Schaltflächen mit einer binären Auswahl anzuzeigen. Ebenso wird ein Ziffernblock ohne Punkt zur Eingabe einer Ganzzahl und eine normale Tastatur zur Eingabe eines Textwerts angezeigt.



Der Befehl PRINT druckt Zeilen auf einem Bildschirm mit Konsolenanzeigetyp. Der Standardwert beträgt 20 Zeilen mit 40 Zeichen. Sie können den Modus mit großen Zeichen 10 x 20 oder klein: 40 x 80 auswählen.

PRINT "     Hi language"


Hallo Rechnersprache



Jetzt haben wir alles, um eine Grammatik eines Taschenrechners mit interaktiver Eingabe / Ausgabe in Form von EBNF in Bezug auf die Hi-Sprache zu bilden.

1. The Syntax of HI Programming Language

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
capital = "A" | ... | "Z".
small = "a" | ... | "z".
character = [Unicode_character].
addOperator = "+" | "-" | "|".
mulOperator = "*" | "/" | "//" | "%" | "&".
relation = "==" | "~=" | "<" | "<=" | ">" | ">=".

integer = digit {digit}.
real = digit {digit} "." {digit}.
string = """ {character} """.

number = integer | real.
letter = capital | small.

keyword = capital capital {capital}.
ident = letter {letter | digit}.
type = keyword.

factor = number | string | TRUE | FALSE | ident | "(" expression ")" | "~" factor.
term = factor {mulOperator factor}.
simpleExpression = ["-"] term {addOperator term}.
expression = simpleExpression [relation simpleExpression].
assignment = ident "=" expression.

identList = ident {"," ident}.
expList = expression {"," expression}.
constDeclaration = LET identList [":" type] "=" expression.
varDeclaration = VAR identList [":" type] ["=" expression].
funcCall = keyword [expList ].

statement = assignment | funcCall | constDeclaration | varDeclaration 
statementSequence = statement {("\n" | ";") statement}.

2. Standard Data Types

BOOL	INT	REAL	STRING

3. Standard Procedures and Functions

INPUT	PRINT

4. Other Keywords

LET	VAR


Im Gegensatz zur Grammatik vieler Sprachen, in der Schlüsselwörter in der Liste der Ausnahmen von einer allgemeineren Klasse von Bezeichnern enthalten sind, führen wir eine spezielle Art von Token ein - Schlüsselwörter, die bereits auf der Ebene des Hi-Language-Interpreter-Scanners erkannt werden.



Im nächsten Artikel werden wir neben STRING auch zusammengesetzte Datentypen in Hi vorstellen. Für unsere einfache Sprache sind sie leistungsfähig genug, um leicht Ideen zur Manipulation von Objektmengen, Arrays und Wörterbüchern auszudrücken.



All Articles