Add equal ('==') operator to strings

This commit is contained in:
Bartłomiej Pluta
2019-07-10 16:02:39 +02:00
parent d6fb101337
commit 98d710ac97
3 changed files with 26 additions and 10 deletions

View File

@@ -53,9 +53,10 @@ class ExpressionNode(Node):
from smnp.ast.node.bool import BoolLiteralNode from smnp.ast.node.bool import BoolLiteralNode
from smnp.ast.node.identifier import IdentifierNode from smnp.ast.node.identifier import IdentifierNode
from smnp.ast.node.string import StringLiteralNode
return Parser.oneOf( return Parser.oneOf(
#IntegerLiteralNode.parse, #IntegerLiteralNode.parse,
#StringLiteralNode.parse, StringLiteralNode.parse,
#NoteLiteralNode.parse, #NoteLiteralNode.parse,
BoolLiteralNode.parse, BoolLiteralNode.parse,
IdentifierNode.parse, IdentifierNode.parse,

View File

@@ -55,12 +55,14 @@ class RelationOperatorNode(ExpressionNode):
@staticmethod @staticmethod
def _relationRhs(): def _relationRhs():
# TODO doAssert
from smnp.ast.node.bool import BoolLiteralNode from smnp.ast.node.bool import BoolLiteralNode
from smnp.ast.node.identifier import IdentifierNode from smnp.ast.node.identifier import IdentifierNode
return Parser.oneOf( from smnp.ast.node.string import StringLiteralNode
return Parser.doAssert(Parser.oneOf(
BoolLiteralNode.accessParser(), BoolLiteralNode.accessParser(),
BoolLiteralNode.literalParser(), BoolLiteralNode.literalParser(),
IdentifierNode.literalParser() IdentifierNode.literalParser(),
) StringLiteralNode.accessParser(),
StringLiteralNode.literalParser()
), "expression")

View File

@@ -1,17 +1,30 @@
from smnp.ast.node.access import AccessNode
from smnp.ast.node.literal import LiteralNode from smnp.ast.node.literal import LiteralNode
from smnp.ast.node.relation import RelationOperatorNode
from smnp.ast.parser import Parser
from smnp.token.type import TokenType from smnp.token.type import TokenType
class StringLiteralNode(LiteralNode): class StringLiteralNode(AccessNode, RelationOperatorNode, LiteralNode):
def __init__(self, pos): def __init__(self, pos):
super().__init__(pos) super().__init__(pos)
#TODO del self.children[1] del self.children[1]
# TODO: To Remove
@classmethod @classmethod
def _parse(cls, input): def _parse(cls, input):
return cls.literalParser()(input) return Parser.oneOf(
cls.accessParser(),
cls.relationParser(),
cls.literalParser()
)(input)
@classmethod
def _accessLhs(cls):
return cls.literalParser()
@classmethod
def _relationLhs(cls):
return cls.literalParser()
@classmethod @classmethod
def _getTokenType(cls): def _getTokenType(cls):