Enable parsing colon

This commit is contained in:
Bartłomiej Pluta
2019-07-01 15:16:09 +02:00
parent 09f5e20ff9
commit 9f3325bc71
2 changed files with 26 additions and 9 deletions

View File

@@ -40,8 +40,9 @@ def parseString(input, parent):
# note -> NOTE
def parseNote(input, parent):
if input.current().type == TokenType.NOTE:
value = input.current().value
if input.current().type == TokenType.NOTE:
token = input.current()
value = token.value
consumedChars = 1
notePitch = value[consumedChars]
consumedChars += 1
@@ -66,7 +67,7 @@ def parseNote(input, parent):
consumedChars += 1
input.ahead()
return NoteLiteralNode(Note(notePitch, octave, duration, dot), parent, input.current().pos)
return NoteLiteralNode(Note(notePitch, octave, duration, dot), parent, token.pos)
return None
# list -> CLOSE_PAREN | expr listTail
@@ -116,12 +117,28 @@ def parseListTail(input, parent):
return None
def parseColon(input, parent):
if input.hasMore() and input.current().type == TokenType.COLON:
expr1 = parent.pop(-1)
token = input.current()
input.ahead()
expr2 = parseExpression(input, parent)
colon = ColonNode(expr1, expr2, parent, token.pos)
expr1.parent = colon
expr2.parent = colon
return colon
return None
def parseExpression(input, parent):
value = runParsers(input, parent, [
parseInteger,
parseString,
parseNote,
parseList
parseList,
parseColon,
])
if value is None:

View File

@@ -21,13 +21,13 @@ class Tokens:
raise RuntimeError(f"Cursor points to not existing token! Cursor = {self.cursor}, len = {len(self.tokens)}")
return self.tokens[self.cursor]
def next(self):
return self.tokens[self.cursor+1]
def next(self, number=1):
return self.tokens[self.cursor + number]
def prev(self):
return self.tokens[self.cursor-1]
def prev(self, number=1):
return self.tokens[self.cursor - number]
def hasMore(self, count):
def hasMore(self, count=1):
return self.cursor + count < len(self.tokens)
def ahead(self):