[C con Clase] Compiladores

Steven Davidson steven en conclase.net
Mar Mar 13 20:35:42 CET 2007


Hola Liudnet,

El pasado 2007-03-13 18:22:48, Liudnet Caballero duboy escribió:

LCd> Hola a todos:
LCd> escribo por que estoy comenzando con el tema de compiladores y  a la hora de entender la gramatica que se debe seguir no entiendo  bien lo que tiene que ver con  las reglas de produccion  y lo del conjunto de simbolos no terminales... si alguien pudiera darme una ayudita se lo agradeceria

Una gramática se basa en axiomas o reglas. Para describir tal gramática, usamos reglas de producción para describir los axiomas del lenguaje. Las reglas de producción se basan en definir símbolos no terminales y terminales. El metalenguaje popular que solemos usar es el llamado BNF: Nomenclatura de Backus-Naur o a veces Nomenclatura Normal de Backus. Por ejemplo, para describir un lenguaje que acepte cualquier "palabra" hecha por series aes y bes con tal de que comience y termine con 'a'. Podemos describir tal lenguaje con BNF de la siguiente manera:

(*) <palabra> ::= a<letras>a | aa
<letras> ::= a<letras> | b<letras> | a | b

Esto describe la sintaxis del lenguaje y con ello podemos verificar si una "palabra" pertenece a nuestro lenguaje o no. Por ejemplo, la palabra "baabaa" no pertenece a nuestro lenguaje. Podemos verificarlo aplicando las reglas establecidas. Empezamos con la producción <palabra>:
baabaa
^

<palabra> ::= a<letras>a

b != a, entonces no se trata de la primera definición de <palabra>. Probemos la segunda:

<palabra> ::= aa

b != a. Como ninguna definición de <palabra> acepta la palabra entrante "baabaa", entonces establecemos que existe un error sintáctico.

Una técnica popular de usar BNF es crear una MEF: Máquina de Estados Finitos. Supongo que lo verás cuando sigas estudiando el tema de compiladores y lenguajes en general.


Espero que todo esto te aclare las dudas.

Steven


Más información sobre la lista de distribución Cconclase