summaryrefslogtreecommitdiffstats
path: root/src/front/lexer.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/front/lexer.py')
-rw-r--r--src/front/lexer.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/front/lexer.py b/src/front/lexer.py
index 53ccaec..e6eb172 100644
--- a/src/front/lexer.py
+++ b/src/front/lexer.py
@@ -4,10 +4,10 @@ from token import *
class Lexer:
def __init__(self, source):
- self.source = (source + "\n\n").splitlines()
+ self.source = (source + "\n").splitlines()
self.source.reverse()
self.line = 0
- self.doubleNewlineCheck = False
+ self.lastWasNewline = True
self.currentLine = ''
# reservierte Wörter initialisieren
@@ -31,31 +31,32 @@ class Lexer:
return
def scan(self):
+ # leerzeichen entfernen
+ self.currentLine = self.currentLine.strip()
+
# wenn in der aktuellen Zeile nichts mehr steht
- if (len(self.currentLine) == 0):
+ if len(self.currentLine) == 0:
# wenn source zuende, dann None zurückgeben
- if (len(self.source) <= 0):
+ if len(self.source) <= 0:
return None
# nächste Zeile auslesen
self.line = self.line + 1
self.currentLine = self.source.pop()
- # newline zurückgeben
- if self.doubleNewlineCheck:
- self.doubleNewlineCheck = False
- return Token(Tag.NEWLINE)
+ # nur ein newline zurückgeben
+ if self.lastWasNewline:
+ return self.scan()
- # leerzeichen entfernen
- self.currentLine = self.currentLine.strip()
+ self.lastWasNewline = True
+ return Token(Tag.NEWLINE)
# bei Kommentar, Rest der Zeile ignorieren
if self.currentLine.startswith('#'):
self.currentLine = ''
return self.scan()
- # keine doppelten Newlines
- self.doubleNewlineCheck = True
+ self.lastWasNewline = False
# Token parsen
if self.currentLine.startswith('@'):