def test_final(self): string = u"""def quadrado : [ lado := 0; input (lado); area := lado * lado; output (area); ]""" parser.parse(string, lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (int32 lado) .locals init (int32 area) ldc.i4 0 stloc ladocall string [mscorlib]System.Console::ReadLine()call int32 [mscorlib]System.Int32::Parse(string)stloc lado ldloc lado\n ldloc lado\n mul\n stloc area ldloc area call void [mscorlib]System.Console::Write(int32)\n ret\n }\n }\n ')
def _compile(self): self.plainTextEdit.clear() print(self.editor.text()) try: parser.parse(str(self.editor.text()), lexer()) self.plainTextEdit.appendPlainText("Programa compilado com sucesso") SemanticTools.reset() except Exception, e: self.plainTextEdit.setPlainText(unicode(e.message))
def _generate(self): self.plainTextEdit.clear() try: fileInfo = QtCore.QFileInfo(self.filename) nameLayer = str(fileInfo.baseName()) SemanticTools.program_name = nameLayer parser.parse(str(self.editor.text()), lexer()) self.plainTextEdit.appendPlainText(u"Código objeto gerado com sucesso") fname = open(self.filename + ".il", 'w') fname.write("\n".join(SemanticTools.code)) fname.close() SemanticTools.reset() except Exception, e: self.plainTextEdit.setPlainText(unicode(e.message))
def test_semantic_success_with_input(self): parser.parse(u"def teste : \n [ lado := 0; input(lado); ]", lexer())
def test_semantic_action_5(self): parser.parse(u"def teste : \n [ esse, outro := 0; input(esse); ]", lexer()) self.assertTrue(SemanticTools.symbol_table["esse"]) self.assertTrue(SemanticTools.symbol_table["outro"])
def test_semantic_action_2_with_success(self): parser.parse(u"def teste : \n [ lado := 0; input(lado); ]", lexer()) self.assertEqual(SemanticTools.main_identifier, "teste")
def test_sum_with_only_integer(self): parser.parse(u'def teste : \n [ xpto := 1 + 1; output(xpto); ]', lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (int32 xpto) ldc.i4 1 ldc.i4 1\n add\n stloc xpto ldloc xpto call void [mscorlib]System.Console::Write(int32)\n ret\n }\n }\n ')
def test_output_with_string(self): parser.parse(u'def teste : \n [ a := "abc"; input(a); output(a); ]', lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (string a) ldstr "abc" stloc acall string [mscorlib]System.Console::ReadLine()stloc a ldloc a call void [mscorlib]System.Console::Write(string)\n ret\n }\n }\n ')
def test_input_with_real(self): parser.parse(u'def teste : \n [ a := 1.0; input(a); ]', lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (float32 a) ldc.r4 1.0 stloc acall string [mscorlib]System.Console::ReadLine()call float32 [mscorlib]System.Float32::Parse(string)stloc a\n ret\n }\n }\n ')
def test_allocating_literal(self): parser.parse(u'def teste : \n [ a := "foo"; ]', lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (string a) ldstr "foo" stloc a\n ret\n }\n }\n ')
def test_allocating_octal(self): parser.parse(u"def teste : \n [ a := 0o0132; ]", lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (int32 a) ldc.i4 90 stloc a\n ret\n }\n }\n ')
def test_code_generation_header_footer_and_allocating_integer_duplicated(self): parser.parse(u"def teste : \n [ a := 1; a := 2;]", lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (int32 a) ldc.i4 1 stloc a ldc.i4 2 stloc a\n ret\n }\n }\n ')
def test_rem(self): parser.parse(u'def teste : \n [ xpto := 1; b := 2; xpto := xpto % b; output(xpto); ]', lexer()) self.assertEqual(''.join(SemanticTools.code), '.assembly extern mscorlib{}\n .assembly teste{}\n .module teste.exe\n .class public teste\n {\n .method public static void principal ()\n {\n .entrypoint .locals init (int32 xpto) .locals init (int32 b) ldc.i4 1 stloc xpto ldc.i4 2 stloc b ldloc xpto\n ldloc b\n rem\n stloc xpto ldloc xpto call void [mscorlib]System.Console::Write(int32)\n ret\n }\n }\n ')
def test_exception_new_line_with_n_and_multiple_lines(self): try: parser.parse(u"def abc : [ a := 1; \n \n a := 2; ? ]", self.var_lex) except Exception, e: self.assertEqual(u"Erro na linha 3 - ? - símbolo inválido", e.message)
def test_empty_string_parse(self): try: parser.parse(u"", lexer()) except Exception, e: self.assertEqual(u"Erro na linha 1 - encontrado EOF, esperado def", e.message)