Create expression2 precendence level (relation operators)
This commit is contained in:
@@ -8,10 +8,12 @@ from smnp.token.type import TokenType
|
|||||||
class Expression(Valuable):
|
class Expression(Valuable):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
ExpressionParser = Parser.leftAssociativeOperatorParser(TermParser, [TokenType.PLUS, TokenType.MINUS], TermParser,
|
ExpressionParser = Parser.leftAssociativeOperatorParser(TermParser, [TokenType.PLUS, TokenType.MINUS], TermParser,
|
||||||
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)))
|
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):
|
# class ExpressionNode(Node):
|
||||||
# def __init__(self, pos):
|
# def __init__(self, pos):
|
||||||
|
|||||||
@@ -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.node.model import Node, ParseResult
|
||||||
from smnp.ast.parser import Parser
|
from smnp.ast.parser import Parser
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ def parse(input):
|
|||||||
|
|
||||||
|
|
||||||
#TODO -> temporary (to remove):
|
#TODO -> temporary (to remove):
|
||||||
ExpressionParser
|
Expression2Parser
|
||||||
)(input)
|
)(input)
|
||||||
|
|
||||||
if result.result:
|
if result.result:
|
||||||
|
|||||||
@@ -5,12 +5,17 @@ from smnp.token.tokenizers.comment import commentTokenizer
|
|||||||
from smnp.token.tokenizers.identifier import identifierTokenizer
|
from smnp.token.tokenizers.identifier import identifierTokenizer
|
||||||
from smnp.token.tokenizers.keyword import typeTokenizer
|
from smnp.token.tokenizers.keyword import typeTokenizer
|
||||||
from smnp.token.tokenizers.note import noteTokenizer
|
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.string import stringTokenizer
|
||||||
from smnp.token.tokenizers.whitespace import whitespacesTokenizer
|
from smnp.token.tokenizers.whitespace import whitespacesTokenizer
|
||||||
from smnp.token.tools import defaultTokenizer, separated, regexPatternTokenizer
|
from smnp.token.tools import defaultTokenizer, separated, regexPatternTokenizer
|
||||||
from smnp.token.type import TokenType
|
from smnp.token.type import TokenType
|
||||||
|
|
||||||
tokenizers = (
|
tokenizers = (
|
||||||
|
# Double-character operators
|
||||||
|
relationOperatorTokenizer,
|
||||||
|
defaultTokenizer(TokenType.DOUBLE_ASTERISK),
|
||||||
|
|
||||||
# Characters
|
# Characters
|
||||||
defaultTokenizer(TokenType.OPEN_CURLY),
|
defaultTokenizer(TokenType.OPEN_CURLY),
|
||||||
defaultTokenizer(TokenType.CLOSE_CURLY),
|
defaultTokenizer(TokenType.CLOSE_CURLY),
|
||||||
@@ -20,7 +25,6 @@ tokenizers = (
|
|||||||
defaultTokenizer(TokenType.CLOSE_SQUARE),
|
defaultTokenizer(TokenType.CLOSE_SQUARE),
|
||||||
defaultTokenizer(TokenType.OPEN_ANGLE),
|
defaultTokenizer(TokenType.OPEN_ANGLE),
|
||||||
defaultTokenizer(TokenType.CLOSE_ANGLE),
|
defaultTokenizer(TokenType.CLOSE_ANGLE),
|
||||||
defaultTokenizer(TokenType.DOUBLE_ASTERISK),
|
|
||||||
defaultTokenizer(TokenType.ASTERISK),
|
defaultTokenizer(TokenType.ASTERISK),
|
||||||
defaultTokenizer(TokenType.ASSIGN),
|
defaultTokenizer(TokenType.ASSIGN),
|
||||||
defaultTokenizer(TokenType.ARROW),
|
defaultTokenizer(TokenType.ARROW),
|
||||||
|
|||||||
6
smnp/token/tokenizers/relation.py
Normal file
6
smnp/token/tokenizers/relation.py
Normal 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)
|
||||||
@@ -2,6 +2,7 @@ from enum import Enum
|
|||||||
|
|
||||||
|
|
||||||
class TokenType(Enum):
|
class TokenType(Enum):
|
||||||
|
RELATION = 'relation'
|
||||||
DOUBLE_ASTERISK = '**'
|
DOUBLE_ASTERISK = '**'
|
||||||
OPEN_CURLY = '{'
|
OPEN_CURLY = '{'
|
||||||
CLOSE_CURLY = '}'
|
CLOSE_CURLY = '}'
|
||||||
|
|||||||
Reference in New Issue
Block a user