def test_build_empty_operator(self): built_phrase = phrase_builder(self.expression_context, PhraseClass.operator, [ Token(TokenClass.word, "delay") ], 0) expected_expr = Phrase(PhraseClass.operator, phrase_subclass=None, keyword=Token(TokenClass.word, "delay"), params=[]) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def test_build_parametrised_label(self): built_phrase = phrase_builder(self.expression_context, PhraseClass.label, [Token(TokenClass.word, "label"), Token(TokenClass.parameter, "@")], 0) expected_expr = Phrase(PhraseClass.label, phrase_subclass=None, keyword=Token(TokenClass.word, "label"), params=[Token(TokenClass.parameter, "@")]) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def test_build_comment(self): built_phrase = phrase_builder(self.body_context, PhraseClass.comment, [Token(TokenClass.word, "w1"), Token(TokenClass.word, "w2"), Token(TokenClass.word, "w3")], 0) expected_expr = Phrase(PhraseClass.comment, phrase_subclass=None, params=[Token(TokenClass.word, "w1"), Token(TokenClass.word, "w2"), Token(TokenClass.word, "w3")]) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def test_build_operator_with_parameters(self): built_phrase = phrase_builder(self.expression_context, PhraseClass.operator, [ Token(TokenClass.word, "delay"), Token(TokenClass.num, "1"), Token(TokenClass.word, "two"), Token(TokenClass.string, "\"3\""), Token(TokenClass.parameter, "@4") ], 0) expected_expr = Phrase(PhraseClass.operator, phrase_subclass=None, keyword=Token(TokenClass.word, "delay"), params=[Token(TokenClass.num, "1"), Token(TokenClass.word, "two"), Token(TokenClass.string, "\"3\""), Token(TokenClass.parameter, "@4")]) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def phrase_builder(context: Phrase, phrase_class: PhraseClass, temp_phrase: List[Token], phrase_line: int) -> Phrase: phrase = Phrase(phrase_class, params=list()) if phrase_class == PhraseClass.block: build_block(phrase, context, temp_phrase, phrase_line) elif phrase_class == PhraseClass.operator: build_operator(phrase, context, temp_phrase, phrase_line) elif phrase_class == PhraseClass.comment: build_comment(phrase, temp_phrase) elif phrase_class == PhraseClass.label: build_label(phrase, context, temp_phrase, phrase_line) elif phrase_class == PhraseClass.blockClose: build_block_close(phrase, temp_phrase) else: raise InterpretationError( PeaceError(f"Unexpected phrase class.", ErrorType.phrase_build_error, phrase_line)) return phrase
def __init__(self): self.root: Node = Node( None, Phrase(PhraseClass.block, PhraseSubclass.program)) self.head: Node = self.root
def test_get_context(self): context = Phrase(PhraseClass.block, PhraseSubclass.program) self.assertTrue(are_phrases_equal(self.tree.get_context(), context))
def test_add_node(self): phrase_in_node = Phrase(PhraseClass.blockClose) expected_node = Node(self.tree.get_head(), phrase_in_node) self.tree.add_leaf(phrase_in_node) self.assertTrue(are_nodes_equal(self.tree.head.nodes[0], expected_node))
def setUpClass(cls) -> None: cls.tree = ParseTree() cls.tree.add_leaf(Phrase(PhraseClass.block, PhraseSubclass.expression)) cls.tree.submerge()
def test_build_device_in_body(self): built_phrase = phrase_builder(self.body_context, PhraseClass.block, [Token(TokenClass.word, "device_in_body")], 0) expected_expr = Phrase(PhraseClass.block, PhraseSubclass.device, keyword=Token(TokenClass.word, "device_in_body")) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def test_build_expression(self): built_phrase = phrase_builder(self.program_context, PhraseClass.block, [Token(TokenClass.word, "expression")], 0) expected_expr = Phrase(PhraseClass.block, PhraseSubclass.expression, keyword=Token(TokenClass.word, "expression")) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))
def setUpClass(cls) -> None: cls.program_context = Phrase(PhraseClass.block, PhraseSubclass.program) cls.expression_context = Phrase(PhraseClass.block, PhraseSubclass.expression) cls.device_context = Phrase(PhraseClass.block, PhraseSubclass.device) cls.body_context = Phrase(PhraseClass.block, PhraseSubclass.body)
def test_build_block_close(self): built_phrase = phrase_builder(self.program_context, PhraseClass.blockClose, [], 0) expected_expr = Phrase(PhraseClass.blockClose, phrase_subclass=None, keyword=None, params=None) self.assertTrue(are_phrases_equal(built_phrase, expected_expr))