Create term precendence level

This commit is contained in:
Bartłomiej Pluta
2019-07-10 22:05:45 +02:00
parent 29820fb2ee
commit 1d573c8c80
7 changed files with 24 additions and 11 deletions

View File

@@ -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))

View File

@@ -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,
)

View File

@@ -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))

View File

@@ -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ś

View File

@@ -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
View 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))