Create term precendence level
This commit is contained in:
@@ -13,5 +13,6 @@ itemParser = Parser.oneOf(
|
||||
AtomParser,
|
||||
)
|
||||
|
||||
ChainParser = Parser.leftAssociativeOperatorParser(itemParser, [TokenType.DOT], itemParser, lambda left, op, right: Chain.withValues(left, op, right))
|
||||
ChainParser = Parser.leftAssociativeOperatorParser(itemParser, [TokenType.DOT], itemParser,
|
||||
lambda left, op, right: Chain.withValues(left, op, right))
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class ExpressionNode(Node):
|
||||
from smnp.ast.node.note import NoteLiteralNode
|
||||
from smnp.ast.node.bool import BoolLiteralNode
|
||||
from smnp.ast.node.identifier import IdentifierNode
|
||||
from smnp.ast.node.list import ListNode
|
||||
from smnp.ast.node.list import List
|
||||
from smnp.ast.node.map import MapNode
|
||||
from smnp.ast.node.type import TypeNode
|
||||
|
||||
@@ -66,6 +66,6 @@ class ExpressionNode(Node):
|
||||
BoolLiteralNode.parse,
|
||||
IdentifierNode.parse,
|
||||
MapNode.parse,
|
||||
ListNode.parse,
|
||||
List.parse,
|
||||
TypeNode.parse,
|
||||
)
|
||||
@@ -8,4 +8,5 @@ class Factor(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
FactorParser = Parser.leftAssociativeOperatorParser(ChainParser, [TokenType.DOUBLE_ASTERISK], ChainParser, lambda left, op, right: Factor.withValues(left, op, right))
|
||||
FactorParser = Parser.leftAssociativeOperatorParser(ChainParser, [TokenType.DOUBLE_ASTERISK], ChainParser,
|
||||
lambda left, op, right: Factor.withValues(left, op, right))
|
||||
@@ -4,9 +4,9 @@ from smnp.ast.node.model import Node
|
||||
from smnp.token.type import TokenType
|
||||
|
||||
|
||||
class ListNode(Node):
|
||||
class List(Node):
|
||||
pass
|
||||
|
||||
|
||||
ListParser = abstractIterableParser(ListNode, TokenType.OPEN_SQUARE, TokenType.CLOSE_SQUARE,
|
||||
AtomParser) #TODO -> zamienić na expr czy coś
|
||||
ListParser = abstractIterableParser(List, TokenType.OPEN_SQUARE, TokenType.CLOSE_SQUARE,
|
||||
AtomParser) #TODO -> zamienić na expr czy coś
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from smnp.ast.node.factor import FactorParser
|
||||
from smnp.ast.node.model import Node, ParseResult
|
||||
from smnp.ast.node.term import TermParser
|
||||
from smnp.ast.parser import Parser
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ def parse(input):
|
||||
|
||||
|
||||
#TODO -> temporary (to remove):
|
||||
FactorParser
|
||||
TermParser
|
||||
)(input)
|
||||
|
||||
if result.result:
|
||||
|
||||
11
smnp/ast/node/term.py
Normal file
11
smnp/ast/node/term.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from smnp.ast.node.factor import FactorParser
|
||||
from smnp.ast.node.operator import BinaryOperator
|
||||
from smnp.ast.parser import Parser
|
||||
from smnp.token.type import TokenType
|
||||
|
||||
|
||||
class Term(BinaryOperator):
|
||||
pass
|
||||
|
||||
TermParser = Parser.leftAssociativeOperatorParser(FactorParser, [TokenType.ASTERISK, TokenType.SLASH], FactorParser,
|
||||
lambda left, op, right: Term.withValues(left, op, right))
|
||||
@@ -4,7 +4,7 @@ from smnp.ast.node.bool import BoolLiteralNode
|
||||
from smnp.ast.node.identifier import IdentifierNode
|
||||
from smnp.ast.node.integer import IntegerLiteralNode
|
||||
from smnp.ast.node.invocation import FunctionCallNode
|
||||
from smnp.ast.node.list import ListNode
|
||||
from smnp.ast.node.list import List
|
||||
from smnp.ast.node.map import MapNode
|
||||
from smnp.ast.node.note import NoteLiteralNode
|
||||
from smnp.ast.node.operator import LeftAssociativeOperatorNode
|
||||
@@ -38,7 +38,7 @@ def expressionEvaluator(doAssert=False):
|
||||
Evaluator.forNodes(BoolEvaluator.evaluate, BoolLiteralNode),
|
||||
Evaluator.forNodes(TypeEvaluator.evaluate, TypeNode),
|
||||
Evaluator.forNodes(IdentifierEvaluator.evaluate, IdentifierNode),
|
||||
Evaluator.forNodes(ListEvaluator.evaluate, ListNode),
|
||||
Evaluator.forNodes(ListEvaluator.evaluate, List),
|
||||
Evaluator.forNodes(AccessEvaluator.evaluate, LeftAssociativeOperatorNode),
|
||||
Evaluator.forNodes(AssignmentEvaluator.evaluate, AssignmentNode),
|
||||
Evaluator.forNodes(AsteriskEvaluator.evaluate, AsteriskNode),
|
||||
|
||||
Reference in New Issue
Block a user