Create expression precendence level

This commit is contained in:
Bartłomiej Pluta
2019-07-10 22:27:44 +02:00
parent 1d573c8c80
commit 4018bcddc7
10 changed files with 390 additions and 346 deletions

View File

@@ -1,12 +1,30 @@
from smnp.ast.node.chain import ChainParser
from smnp.ast.node.operator import BinaryOperator
from smnp.ast.node.valuable import Valuable
from smnp.ast.parser import Parser
from smnp.token.type import TokenType
class Factor(BinaryOperator):
class Factor(Valuable):
pass
FactorParser = Parser.leftAssociativeOperatorParser(ChainParser, [TokenType.DOUBLE_ASTERISK], ChainParser,
lambda left, op, right: Factor.withValues(left, op, right))
powerFactor = Parser.leftAssociativeOperatorParser(ChainParser, [TokenType.DOUBLE_ASTERISK], ChainParser,
lambda left, op, right: Factor.withValue(BinaryOperator.withValues(left, op, right)))
def exprFactor():
from smnp.ast.node.expression import ExpressionParser
return Parser.allOf(
Parser.terminalParser(TokenType.OPEN_PAREN),
ExpressionParser,
Parser.terminalParser(TokenType.CLOSE_PAREN),
createNode=lambda open, expr, close: expr
)
def FactorParser(input):
return Parser.oneOf(
powerFactor,
exprFactor()
)(input)