Create expression2 precendence level (relation operators)

This commit is contained in:
Bartłomiej Pluta
2019-07-10 22:39:22 +02:00
parent 4018bcddc7
commit 3058293b7e
5 changed files with 17 additions and 4 deletions

View File

@@ -8,10 +8,12 @@ from smnp.token.type import TokenType
class Expression(Valuable):
pass
ExpressionParser = Parser.leftAssociativeOperatorParser(TermParser, [TokenType.PLUS, TokenType.MINUS], TermParser,
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)))
Expression2Parser = Parser.leftAssociativeOperatorParser(ExpressionParser, [TokenType.RELATION], ExpressionParser,
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)))
#
# class ExpressionNode(Node):
# def __init__(self, pos):

View File

@@ -1,4 +1,4 @@
from smnp.ast.node.expression import ExpressionParser
from smnp.ast.node.expression import Expression2Parser
from smnp.ast.node.model import Node, ParseResult
from smnp.ast.parser import Parser
@@ -15,7 +15,7 @@ def parse(input):
#TODO -> temporary (to remove):
ExpressionParser
Expression2Parser
)(input)
if result.result:

View File

@@ -5,12 +5,17 @@ from smnp.token.tokenizers.comment import commentTokenizer
from smnp.token.tokenizers.identifier import identifierTokenizer
from smnp.token.tokenizers.keyword import typeTokenizer
from smnp.token.tokenizers.note import noteTokenizer
from smnp.token.tokenizers.relation import relationOperatorTokenizer
from smnp.token.tokenizers.string import stringTokenizer
from smnp.token.tokenizers.whitespace import whitespacesTokenizer
from smnp.token.tools import defaultTokenizer, separated, regexPatternTokenizer
from smnp.token.type import TokenType
tokenizers = (
# Double-character operators
relationOperatorTokenizer,
defaultTokenizer(TokenType.DOUBLE_ASTERISK),
# Characters
defaultTokenizer(TokenType.OPEN_CURLY),
defaultTokenizer(TokenType.CLOSE_CURLY),
@@ -20,7 +25,6 @@ tokenizers = (
defaultTokenizer(TokenType.CLOSE_SQUARE),
defaultTokenizer(TokenType.OPEN_ANGLE),
defaultTokenizer(TokenType.CLOSE_ANGLE),
defaultTokenizer(TokenType.DOUBLE_ASTERISK),
defaultTokenizer(TokenType.ASTERISK),
defaultTokenizer(TokenType.ASSIGN),
defaultTokenizer(TokenType.ARROW),

View File

@@ -0,0 +1,6 @@
from smnp.token.tools import keywordsTokenizer
from smnp.token.type import TokenType
def relationOperatorTokenizer(input, current, line):
return keywordsTokenizer(TokenType.RELATION, "==", "!=", ">=", "<=", ">", "<")(input, current, line)

View File

@@ -2,6 +2,7 @@ from enum import Enum
class TokenType(Enum):
RELATION = 'relation'
DOUBLE_ASTERISK = '**'
OPEN_CURLY = '{'
CLOSE_CURLY = '}'