Create evaluator for sum (sum, subtraction and string concatenation)
This commit is contained in:
@@ -1,11 +1,22 @@
|
||||
from smnp.ast.node.operator import BinaryOperator
|
||||
from smnp.ast.node.term import TermParser
|
||||
from smnp.ast.node.valuable import Valuable
|
||||
from smnp.ast.parser import Parser
|
||||
from smnp.token.type import TokenType
|
||||
|
||||
|
||||
class Expression(Valuable):
|
||||
class Sum(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
class Relation(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
class And(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
class Or(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
@@ -16,28 +27,28 @@ def ExpressionParser(input):
|
||||
TermParser,
|
||||
[TokenType.PLUS, TokenType.MINUS],
|
||||
TermParser,
|
||||
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
|
||||
lambda left, op, right: Sum.withValues(left, op, right)
|
||||
)
|
||||
|
||||
expr2 = Parser.leftAssociativeOperatorParser(
|
||||
expr1,
|
||||
[TokenType.RELATION, TokenType.OPEN_ANGLE, TokenType.CLOSE_ANGLE],
|
||||
expr1,
|
||||
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
|
||||
lambda left, op, right: Relation.withValues(left, op, right)
|
||||
)
|
||||
|
||||
expr3 = Parser.leftAssociativeOperatorParser(
|
||||
expr2,
|
||||
[TokenType.AND],
|
||||
expr2,
|
||||
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
|
||||
lambda left, op, right: And.withValues(left, op, right)
|
||||
)
|
||||
|
||||
expr4 = Parser.leftAssociativeOperatorParser(
|
||||
expr3,
|
||||
[TokenType.OR],
|
||||
expr3,
|
||||
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
|
||||
lambda left, op, right: Or.withValues(left, op, right)
|
||||
)
|
||||
|
||||
ifElseExpression = Parser.allOf(
|
||||
|
||||
Reference in New Issue
Block a user