Fix evaluator to make use of new parser

This commit is contained in:
Bartłomiej Pluta
2019-07-01 19:30:50 +02:00
parent c266e5b28e
commit 3573ca4e76
3 changed files with 47 additions and 34 deletions

View File

@@ -132,7 +132,7 @@ def parseList(input, parent):
# list -> expr listTail
if input.hasCurrent():
token = input.current()
expr = rollup(parseExpression)(input, node)
expr = parseExpression(input, node)
item = ListItemNode(expr, node, token.pos)
expr.parent = item
node.append(item)
@@ -281,34 +281,18 @@ def parseReturn(input, parent):
return None
def parseStatement(input, parent):
value = runParsers(input, parent, [
stmt = runParsers(input, parent, [
parseBlock,
parseExpression,
parseFunctionDefinition,
parseReturn
])
return value
def parseExpression(input, parent):
expr = runParsers(input, parent, [
parseIntegerAndPercent,
parseMinus,
parseString,
parseNote,
parseList,
parseIdentifierOrFunctionCallOrAssignment,
])
colon = parseColon(expr, input, parent)
if colon is not None:
return colon
asterisk = parseAsterisk(expr, input, parent)
asterisk = parseAsterisk(stmt, input, parent)
if asterisk is not None:
return asterisk
return expr
return stmt
# asterisk -> expr '*' stmt
def parseAsterisk(expr, input, parent):
@@ -324,6 +308,22 @@ def parseAsterisk(expr, input, parent):
return asterisk
return None
def parseExpression(input, parent):
expr = runParsers(input, parent, [
parseIntegerAndPercent,
parseMinus,
parseString,
parseNote,
parseList,
parseIdentifierOrFunctionCallOrAssignment,
])
colon = parseColon(expr, input, parent)
if colon is not None:
return colon
return expr
# colon -> expr ':' expr
def parseColon(expr1, input, parent):
if input.hasCurrent() and input.current().type == TokenType.COLON: