Move parenthesed expression to atom
This commit is contained in:
@@ -78,8 +78,18 @@ def AtomParser(input):
|
|||||||
from smnp.ast.node.identifier import IdentifierParser
|
from smnp.ast.node.identifier import IdentifierParser
|
||||||
from smnp.ast.node.list import ListParser
|
from smnp.ast.node.list import ListParser
|
||||||
from smnp.ast.node.map import MapParser
|
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(
|
return Parser.oneOf(
|
||||||
|
parentheses,
|
||||||
LiteralParser,
|
LiteralParser,
|
||||||
IdentifierParser,
|
IdentifierParser,
|
||||||
ListParser,
|
ListParser,
|
||||||
|
|||||||
@@ -11,26 +11,11 @@ class Power(BinaryOperator):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def FactorParser(input):
|
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(
|
powerFactor = Parser.leftAssociativeOperatorParser(
|
||||||
factorOperands,
|
UnitParser,
|
||||||
[TokenType.DOUBLE_ASTERISK],
|
[TokenType.DOUBLE_ASTERISK],
|
||||||
factorOperands,
|
UnitParser,
|
||||||
lambda left, op, right: Power.withValues(left, op, right),
|
lambda left, op, right: Power.withValues(left, op, right),
|
||||||
name="power operator"
|
name="power operator"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user