Rename 'access.py' to 'operator.py'

This commit is contained in:
Bartłomiej Pluta
2019-07-10 16:55:37 +02:00
parent 88b245dc05
commit 214eec0e7a
13 changed files with 77 additions and 76 deletions

View File

@@ -1,65 +0,0 @@
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.none import NoneNode
from smnp.ast.parser import Parser
from smnp.error.syntax import SyntaxException
from smnp.token.type import TokenType
class LeftAssociativeOperatorNode(ExpressionNode):
def __init__(self, pos):
super().__init__(pos)
self.children = [NoneNode(), NoneNode(), NoneNode()]
@property
def left(self):
return self[0]
@left.setter
def left(self, value):
self[0] = value
@property
def operator(self):
return self[1]
@operator.setter
def operator(self, value):
self[1] = value
@property
def right(self):
return self[2]
@right.setter
def right(self, value):
self[2] = value
@classmethod
def _parse(cls, input):
def createNode(left, operator, right):
node = LeftAssociativeOperatorNode(right.pos)
node.left = left
node.operator = operator
node.right = right
return node
return Parser.leftAssociativeOperatorParser(
cls._literalParser(),
TokenType.DOT,
cls._parseAccessingProperty(),
createNode=createNode
)(input)
@classmethod
def _literalParser(cls):
pass
@staticmethod
def _parseAccessingProperty():
from smnp.ast.node.identifier import IdentifierNode
return Parser.oneOf(
IdentifierNode._literalParser(),
IdentifierNode._functionCallParser(),
exception=lambda input: SyntaxException(f"Expected property name or method call, found '{input.current().rawValue}'", input.currentPos())
)

View File

@@ -1,5 +1,5 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.literal import LiteralNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.token.type import TokenType

View File

@@ -1,7 +1,7 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.assignment import AssignmentNode
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.invocation import FunctionCallNode, ArgumentsListNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType

View File

@@ -1,4 +1,4 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType

View File

@@ -1,8 +1,8 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.model import Node
from smnp.ast.node.none import NoneNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType

View File

@@ -1,6 +1,6 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType

View File

@@ -1,15 +1,16 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.bool import BoolLiteralNode
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.integer import IntegerLiteralNode
from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.none import NoneNode
from smnp.ast.node.note import NoteLiteralNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.node.string import StringLiteralNode
from smnp.ast.node.type import TypeNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType
class MapEntry(ExpressionNode):
def __init__(self, pos):
super().__init__(pos)

View File

@@ -1,5 +1,5 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.literal import LiteralNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.token.type import TokenType

View File

@@ -1,4 +1,69 @@
from smnp.ast.node.expression import ExpressionNode
from smnp.ast.node.model import Node
from smnp.ast.node.none import NoneNode
from smnp.ast.parser import Parser
from smnp.error.syntax import SyntaxException
from smnp.token.type import TokenType
class LeftAssociativeOperatorNode(ExpressionNode):
def __init__(self, pos):
super().__init__(pos)
self.children = [NoneNode(), NoneNode(), NoneNode()]
@property
def left(self):
return self[0]
@left.setter
def left(self, value):
self[0] = value
@property
def operator(self):
return self[1]
@operator.setter
def operator(self, value):
self[1] = value
@property
def right(self):
return self[2]
@right.setter
def right(self, value):
self[2] = value
@classmethod
def _parse(cls, input):
def createNode(left, operator, right):
node = LeftAssociativeOperatorNode(right.pos)
node.left = left
node.operator = operator
node.right = right
return node
return Parser.leftAssociativeOperatorParser(
cls._literalParser(),
TokenType.DOT,
cls._parseAccessingProperty(),
createNode=createNode
)(input)
@classmethod
def _literalParser(cls):
pass
@staticmethod
def _parseAccessingProperty():
from smnp.ast.node.identifier import IdentifierNode
return Parser.oneOf(
IdentifierNode._literalParser(),
IdentifierNode._functionCallParser(),
exception=lambda input: SyntaxException(f"Expected property name or method call, found '{input.current().rawValue}'", input.currentPos())
)
class OperatorNode(Node):

View File

@@ -1,5 +1,5 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.literal import LiteralNode
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.token.type import TokenType

View File

@@ -1,6 +1,6 @@
from smnp.ast.node.access import LeftAssociativeOperatorNode
from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.model import Node
from smnp.ast.node.operator import LeftAssociativeOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType
from smnp.type.model import Type

View File

@@ -1,7 +1,6 @@
from smnp.ast.node.ignore import IgnoredNode
from smnp.ast.node.model import ParseResult, Node
from smnp.ast.node.none import NoneNode
from smnp.ast.node.operator import OperatorNode
from smnp.error.syntax import SyntaxException
@@ -95,6 +94,7 @@ class Parser:
# leftAssociative -> left | left OP right
@staticmethod
def leftAssociativeOperatorParser(leftParser, operatorTokenType, rightParser, createNode):
from smnp.ast.node.operator import OperatorNode
def parse(input):
left = leftParser(input)
if left.result: