Ik heb de taal Why++ genoemd. Voornamelijk om de onlogische on onduidelijke operators en manier van programmeren.
Grofweg zijn dit de stappen.
- Als eerste wordt een file ingelezen, die returned een lijst met tokens terug.
- Deze lijst met tokens worden omgezet tot één waarde en/of assignment aan een variable
- De ProgramState wordt geupdate met geupdate met de variabelen en waarde die daarbij hoort.
- De ProgramState wordt gereturned.
- in de interpreter.py, functie tokenize leest character voor character in en returned een token. Deze functie roept recursief tokenize aan. Afhankelijk van de character returned hij een type token. Hieronder een kort overzicht van de tokens in inheritance.
-
De tokens worden omgezet tot één waarde en/of assignment aan een variable. Dit gebeurd in de execute functie. Allereerst worden first_precedence tokens uitgevoerd (zoals multiply en divide). Vervolgens worden second_precedence tokens uitgevoerd(addition en subtraction). Uiteindelijk is één token het resultaat (een IntegerToken met een waarde, of een Variable token met een waarde en identifier)
-
Daarna wordt de variable aan de programstate toegevoegd. Dit gebeurd in de insert_variable functie.
-
De ProgramState wordt uiteindelijk gereturned.
| Why++ | Python equivalent | type | Precedence |
|---|---|---|---|
| _ | * | Multiply | First |
| $ | / | Division | First |
| [ | + | Addition | Second |
| - | - | Subtraction | Second |
| : | = | Assignment | No precedence |
| { | < | Less than | Third |
| } | > | Greater than | Third |
| ! | While | Keyword | no |
| ? | executor | keyword | no |
While statements zijn mogelijk in Why++. Ze moeten op dezelfde regel zijn opgeschreven. Hieronder is een voorbeeld van de syntax.
! A { B ? A : A [ 1
Python equivelant
while A < B:
A = A + 1Hieronder is de instructie uitgelegd.
-
Het
'!'teken geeft aan dat het om een while statement gaat. -
Vervolgens wordt er gekeken naar de
'?'token. -
Tussen de
'!'en de'?'(DusA { B) wordt gezien als die conditie waaraan voldaan moet worden. -
Alles achter de
'?'wordt gezien als uit te voeren expressie als de conditie waar is.
De tokens zijn opgedeeld in first, second en third precedence tokens. In volgorde van first, second en third worden de operaties uitgevoerd.
A : 1
B : 5
C:5 _ 2
C :5 _ 3
D : 5 } 3 [ 3
number113:2 _ 53 [ 7 _ 1 [ 4 $ 2 [ 2
F : number113 [ 7
multiplyCwithF : C _ F
! A { B ? A : A [ 1
Python representatie:
A = 1
B = 5
C=5 * 2
C =5 * 3
D = 5 > 3 + 3
number113=2 * 53 + 7 * 1 + 4 / 2 + 2
F = number113 + 7
multiplyCwithF = C * F
while A < B:
A = A + 1resulteert in:
Variables: {'A': '5', 'B': '5', 'C': 15, 'D': False, 'number113': 113, 'F': '120', 'multiplyCwithF': 1800}
- Alles is type-annotated volgens Sectie 4.4 van de reader.
- Turing compleet (basis operaties + while loop)
- Er is gebruik gemaakt van inheritance voor de tokens. Dit is te zien in het klassendiagram.
- Er is meerdere malen(meer dan de minimale 3 keer) gebruik gemaakt van map en filter. er is gebruikt gemaakt van zip.
- Decorator functie is toegevoegd die de tijd meet in een bepaalde functie.
- Een eigen taal is bedacht.
