예제 #1
0
 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))
예제 #2
0
 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))
예제 #3
0
 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))
예제 #4
0
 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))
예제 #5
0
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
예제 #6
0
 def __init__(self):
     self.root: Node = Node(
         None, Phrase(PhraseClass.block, PhraseSubclass.program))
     self.head: Node = self.root
예제 #7
0
 def test_get_context(self):
     context = Phrase(PhraseClass.block, PhraseSubclass.program)
     self.assertTrue(are_phrases_equal(self.tree.get_context(), context))
예제 #8
0
 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))
예제 #9
0
 def setUpClass(cls) -> None:
     cls.tree = ParseTree()
     cls.tree.add_leaf(Phrase(PhraseClass.block, PhraseSubclass.expression))
     cls.tree.submerge()
예제 #10
0
 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))
예제 #11
0
 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))
예제 #12
0
 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)
예제 #13
0
 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))