-
Notifications
You must be signed in to change notification settings - Fork 0
/
gramatica_sintactico.txt
60 lines (36 loc) · 2.12 KB
/
gramatica_sintactico.txt
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
Tengo esta gramatica:
<programa> ::= <lista_declaracion>
<lista_declaracion> ::= <lista_declaracion> <declaracion> | <declaracion>
<declaracion> ::= <declaracion_variable> | <lista_sentencias>
<declaracion_variable> ::= <tipo> <identificador> ";"
<tipo> ::= "int" | "real" | "void"
<lista_sentencias> ::= <lista_sentencias> <sentencia>| <vacio>
<sentencia> ::= <seleccion> | <iteracion> | <repeticion> | <sent_in> | <sent_out> | <asignacion>
<asignacion> ::= <identificador> <asignacion_op> <sent_expresion>
<asignacion_op> ::= "=" | "+=" | "-=" | "*=" | "/=" | "%="
<sent_expresion> ::= <expresion> ";" | ";"
<seleccion> ::= "if" <expresion> <sentencia> "end"
| "if" <expresion> <sentencia> "else" <sentencia> "end"
<iteracion> ::= "while" <expresion> <sentencia> "end"
<repeticion> ::= "do" <sentencia> "until" <expresion>
<sent_in> ::= "cin" <identificador> ";"
<sent_out> ::= "cout" <expresion> ";"
<expresion> ::= <expresion_simple> <relacion_op> <expresion_simple> | <expresion_simple>
<relacion_op> ::= "<=" | "<" | ">" | ">=" | "==" | "!="
<expresion_simple> ::= <expresion_simple> <suma_op> <termino> | <termino>
<suma_op> ::= "+" | "-" | "++" | "--"
<termino> ::= <termino> <mult_op> <factor> | <factor>
<mult_op> ::= "*" | "/" | "%"
<factor> ::= "(" <expresion> ")" | <numero> | <identificador>
Puedes desarrollarme un analizador sintactico completo en python en base a esa gramatica, el analizador debe generar un arbol sintactico como salida a un archivo de texto, ademas no debe pararse en los errores sintacticos solamente guardarlos a otro archivo y seguir. Tengo esta funcion para leer los tokens generados por un analizador lexico en un archivo resultados.txt. # Función para leer los tokens desde el archivo
def read_tokens(filename):
with open(filename, 'r') as file:
# Ignorar las dos primeras líneas
file.readline()
file.readline()
# Leer los tokens desde el archivo
tokens = []
for line in file:
token_type, value = line.strip().split('|')
tokens.append(Token(token_type.strip(), value.strip(), len(tokens) + 3))
return tokens