Python: Analizador de la función VOID MAIN de C++
Descripción
Analizador Léxico y
Sintáctico de una función void main() de C++ hecho en python, que
analiza dicha función, con declaración de variables y asignación
de valores enteros.
Lee los datos de un
archivo llamado gram.
La lectura del
archivo se hace linea por linea, extrayendo los datos para luego
separarlos en tokens y realizar el análisis sintáctico de acuerdo a
la gramática.
Gramática en
Notación BNF
<function_main> ::= void main ( ) { <sentence> }
<sentence> ::= <declaration> | <assig>
<declaration> ::= <type_data> <dec_a>;
<dec_a> ::= <identifier> | , <identifier> <dec_a>
<assig> ::= <identifier> = <expr> ;
<expr> ::= <expr> <operator> <expr> |
<indentifier> | <const_int>
<indentifier> ::= <letter> <ide_a>
<ide_a> ::= <digit> <ide_a> | <letter>
<ide_a>
<const_int> ::= <digit> | <digit> <const_int>
<type_data> ::= int
<letter> ::= <letter_l> | <letter_u>
<letter_u> ::= A | ... | Z
<letter_l> ::= a | ... | z
<digit> ::= 0 | ... | 9
<operator> ::= + | - | * | /
Tokens:
Declaración mediante tuplas
(TYPE_FUNCTION, NAME_FUNCTION) = ('void', 'main')
(PAREN_BEGIN, PAREN_END) = ('(', ')')
(BRACK_BEGIN, BRACK_END) = ('{', '}')
(COM, SEMICOLON) = (',', ';')
(OP_ASSIG) = ('=')
DIGIT = tuple([str(i) for i in range(10)])
OPERATOR_B = ('+', '-', '*', '/')
TYPE_DATA = ('int', 'float')
#
Algunas funciones
de análisis de tokens
def isLetter(x): #letra
def isDigit(x): #digito
def isOperator(x) #operador
def isTypeData(x): #tipo de dato
def isIdentifier(x): #identificador
-> 1) Fichero de entrada gram
void main ( )
{
int a, b, B; int f;
a = 12 + B;
int x;
x = b + 25 * 12;
f = a * x;
}
-> 2) Salida
de programa
void: Tipo void
main: Funcion principal
(: Parentesis inicio
): Parentesis final
{: Corchete inicio
...
}: Corchete final
---- Parsing correcto ----
-- 1) Entrada
incorrecta
Por ejemplo si
cambiamos en fichero gram la linea a = 12 + B; por a = 12 + var;
-- 2) Salida de
análisis incorrecto
void: Tipo void
...
+: Operador mas
Stop --> Line[5] var: no definido
Stop --> Line[5]
Código Fuente
Completo
Hola me gustaria saber si por ahi tienes codigo del analizador lexico y sintactico de python(del leguaje python....!!!).
ResponderEliminarpd:
Gracias!