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      ')
예제 #2
0
 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))
예제 #3
0
 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))
예제 #4
0
 def test_semantic_success_with_input(self):
   parser.parse(u"def teste : \n [ lado := 0; input(lado);  ]", lexer())
예제 #5
0
 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"])
예제 #6
0
 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      ')
예제 #10
0
 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      ')
예제 #11
0
 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      ')
예제 #12
0
 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      ')
예제 #13
0
 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      ')
예제 #14
0
 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)    
예제 #15
0
 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)