summaryrefslogtreecommitdiffstats
path: root/src/front/lexer.py
diff options
context:
space:
mode:
authorAndreas Nüßlein <nutz@unfoog.de>2009-06-30 20:57:09 +0200
committerAndreas Nüßlein <nutz@unfoog.de>2009-06-30 20:57:09 +0200
commit8c9fb246794f7cb94689c348f104b29433416f4e (patch)
treee32ae136f1baacafc0cc266382846ab3ae007e47 /src/front/lexer.py
parent4aedc5d76250fae734af1cd89256ec70e165ab18 (diff)
downloadswppy-8c9fb246794f7cb94689c348f104b29433416f4e.tar.gz
swppy-8c9fb246794f7cb94689c348f104b29433416f4e.tar.xz
swppy-8c9fb246794f7cb94689c348f104b29433416f4e.zip
implemented scope and most of ast
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('@'):