-
Notifications
You must be signed in to change notification settings - Fork 1
/
compiler.py
63 lines (50 loc) · 1.83 KB
/
compiler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'''
Problema 4 - Análise Semântica
EXA869 – MI Processadores de Linguagens de Programação
Equipe:
Luis Fernando do Rosario Cintra
Lucas Gabriel da Silva Lima Reis
Lucas Carneiro de Araújo Lima
Igor Figueredo Soares
João Gabriel Lima Almeida
Estéfane Carmo de Souza
Rogério dos Santos Cerqueira
Felipe Silva Queiroz
Francisco Ferreira
Georgenes Caleo Silva Pinheiro
'''
from analisador_lexico.lexicalAnalyzer import lexical_analise
from analisador_sintatico.parser import Parser
from analisador_semantico.semantic_analyzer import SemanticAnalyzer
def write_file(file_name, list, message):
with open(file_name, "w", encoding="utf-8") as file:
if not list:
file.write(message)
return
for item in list:
file.write(f"{item}\n")
def main():
TEST_FILE = './analisador_semantico/test/test.txt' # Exemplo: ./test/function_sample.txt
tokens = lexical_analise(TEST_FILE)
if tokens :
validator = SemanticAnalyzer()
parser = Parser(validator, tokens)
parser.run()
print("\n--------------- tabela de registro ---------------")
print(validator.registers_type_table)
print("\n--------------- tabela global ---------------")
print(validator.pairs_table)
if parser.get_error_list():
print("Erros foram encontrados durante a análise sintática.")
else:
print("A análise sintática foi realizada com sucesso.")
if validator.get_error_list():
print("Erros foram encontrados durante a análise semântica.")
else:
print("A análise semântica foi realizada com sucesso.")
write_file("./saidas/parser_result.txt", parser.get_error_list(), "A análise sintática foi realizada com sucesso.")
write_file("./saidas/semantic_result.txt", validator.get_error_list(), "A análise semantica foi realizada com sucesso.")
else:
print("Erro durante a análise léxica.")
if __name__ == "__main__":
main()