diff --git a/src/ast_types.py b/src/ast_types.py index 763ab17..01054f9 100644 --- a/src/ast_types.py +++ b/src/ast_types.py @@ -1,5 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-only -# Copyright 2021 Jookia +# Copyright 2022 Jookia class Reference: @@ -17,6 +17,9 @@ def __repr__(self): return "Bool(%s)" % (self.value) + def __eq__(self, other): + return self.value == other.value + class Text: def __init__(self, value): @@ -25,6 +28,9 @@ def __repr__(self): return "Text('%s')" % (self.value) + def __eq__(self, other): + return self.value == other.value + class Statement: def __init__(self, subject, verb, arguments): diff --git a/src/parse.py b/src/parse.py index 0ea999a..cf6e11a 100644 --- a/src/parse.py +++ b/src/parse.py @@ -2,7 +2,8 @@ # Copyright 2022 Jookia import enum -from src.syntax import Syntax, SyntaxStream, SyntaxType +from src.ast_types import Bool, Text +from src.syntax import SyntaxStream, SyntaxType # Tasks that happen during parsing @@ -135,7 +136,6 @@ context = ParseContext(ParseTask.PARSE_TEXT, stream.peek(), parent_context) buffer = "" s = read_token(stream, "StartText", context) - location = s.location # Parse following tokens while True: s = read_token(stream, None, context) @@ -147,18 +147,17 @@ break else: buffer += s.value + " " - type = SyntaxType.TEXT value = buffer[:-1] # Drop trailing space - return Syntax(value, location, type) + return Text(value) # Parses a boolean syntax node def parse_bool(self, stream, parent_context): context = ParseContext(ParseTask.PARSE_BOOL, stream.peek(), parent_context) s = read_token(stream, None, context) if s.value == "True": - return Syntax(True, s.location, SyntaxType.BOOL) + return Bool(True) elif s.value == "False": - return Syntax(False, s.location, SyntaxType.BOOL) + return Bool(False) else: raise ParseErrorException(ParseError.NOT_BOOL, s, None, context) diff --git a/tests/parse/test_bool.py b/tests/parse/test_bool.py index 53e204f..53e3927 100644 --- a/tests/parse/test_bool.py +++ b/tests/parse/test_bool.py @@ -4,8 +4,9 @@ from hypothesis import assume from hypothesis.strategies import composite +from src.ast_types import Bool from src.parse import ParseContext, ParseError, ParseErrorException, ParseTask, Parser -from src.syntax import Syntax, SyntaxType +from src.syntax import SyntaxType from tests.parse.templates import template_parse_valid, template_parse_invalid from tests.test_syntax import draw_token_bool, draw_syntax_random @@ -15,8 +16,7 @@ def draw_syntax_bool_valid(draw): token = draw(draw_token_bool()) value = token.value == "True" - result = Syntax(value, token.location, SyntaxType.BOOL) - return ([token], result) + return ([token], Bool(value)) # Draws tokens to not make a valid boolean diff --git a/tests/parse/test_text.py b/tests/parse/test_text.py index 516b552..828405e 100644 --- a/tests/parse/test_text.py +++ b/tests/parse/test_text.py @@ -7,6 +7,7 @@ lists, ) +from src.ast_types import Text from src.parse import ( ParseContext, ParseError, @@ -14,7 +15,7 @@ ParseTask, Parser, ) -from src.syntax import Syntax, SyntaxType +from src.syntax import SyntaxType from tests.parse.templates import ( insert_random_within, template_parse_invalid, @@ -55,8 +56,7 @@ start = draw(draw_token_by_value("StartText")) end = draw(draw_token_by_value("EndText")) all_tokens = [start] + tokens + [end] - result = Syntax(value, start.location, SyntaxType.TEXT) - return (all_tokens, result) + return (all_tokens, Text(value)) # Tests parse_text works correctly