Move parenthesed expression to atom

This commit is contained in:
Bartłomiej Pluta
2019-07-16 10:23:30 +02:00
parent ea28ab6235
commit 5a2508e804
2 changed files with 12 additions and 17 deletions

View File

@@ -78,8 +78,18 @@ def AtomParser(input):
from smnp.ast.node.identifier import IdentifierParser
from smnp.ast.node.list import ListParser
from smnp.ast.node.map import MapParser
from smnp.ast.node.expression import ExpressionParser
parentheses = Parser.allOf(
Parser.terminal(TokenType.OPEN_PAREN),
Parser.doAssert(ExpressionParser, "expression"),
Parser.terminal(TokenType.CLOSE_PAREN),
createNode=lambda open, expr, close: expr,
name="grouping parentheses"
)
return Parser.oneOf(
parentheses,
LiteralParser,
IdentifierParser,
ListParser,

View File

@@ -11,26 +11,11 @@ class Power(BinaryOperator):
pass
def FactorParser(input):
from smnp.ast.node.expression import ExpressionParser
parentheses = Parser.allOf(
Parser.terminal(TokenType.OPEN_PAREN),
Parser.doAssert(ExpressionParser, "expression"),
Parser.terminal(TokenType.CLOSE_PAREN),
createNode=lambda open, expr, close: expr,
name="grouping parentheses"
)
factorOperands = Parser.oneOf(
parentheses,
UnitParser,
name="factor operands"
)
powerFactor = Parser.leftAssociativeOperatorParser(
factorOperands,
UnitParser,
[TokenType.DOUBLE_ASTERISK],
factorOperands,
UnitParser,
lambda left, op, right: Power.withValues(left, op, right),
name="power operator"
)