You are on page 1of 17

+

Programando el
analizador lxico -
sintctico
+
Cuerpo del Programa
options
{
//Opciones de generacin.
}

PARSER_BEGIN(NombreClase)

//Cdigo Java.

PARSER_END(NombreClase)

//Skip
//Tokens
//Gramticas


+
Opciones
! En esta seccin se definen las opciones de
generacin y compilacin que tendr nuestro
Parser.

options{
JDK_VERSION = "1.5;
static = true;
}

+
Cdigo principal de Java
! En esta parte se define la clase principal y su
mtodo main. As como tambin los imports a
utilizar.

PARSER_BEGIN(MyParser)

package edu.sabados;

public class MyParser
{
public static void main(String args []) throws ParseException
{
MyParser parser = new MyParser(System.in);
parser.principal();
}
}

PARSER_END(MyParser)

+
Skip
! En esta seccin se definen los caracteres que
nuestro parser va a omitir.


SKIP :
{
" "
| "\r"
| "\t"
| "\n"
}
+
Tokens
! En esta seccin se definen las palabras reservadas
de nuestro lenguaje.
! Pueden ser tokens estticos y tokens dinmicos.
+
Tokens estticos.
! Estos tokens su estructura no cambia una vez que
son definidos.

TOKEN:
{
< BEGIN: "begin">
| < END: "end">
| < READ : "read" >
| < WRITE : "write" >
| < IF : "if" >
| < ELSE: "else">
| < ELSEIF : "elseif" >
}
+
Tokens dinmicos.
! Son Tokens que su valor cambian en tiempo de
ejecucin y estn formados por una expresin
regular.

TOKEN:
{
<#DIGITO: ["0"-"9"]>
| <#LETRA: ["a"-"z","A"-"Z"] >
| <VALOR_ENTERO: (<DIGITO>)+ >
| <VALOR_DECIMAL: (<DIGITO>)+"."(<DIGITO>)+>
| < VALOR_CADENA :("\"" (~[ "\"" ])+ "\"")>
| <IDENTIFICADOR: (<LETRA>)(<LETRA>|<DIGITO>)*>
}
+
Gramticas
! Son las reglas de cmo deben estar estructuradas las
sentencias de nuestro compilador.
! Practicamente consiste en indicar como deben de estar
organizados los tokens.
! Ejemplo:
if ( numero > 8 ){
System.out.println(Hola mundo aqu hay mas de 8);
}
+
Sintaxis del If
if ( condicion == true ){
//Sentencias
}
[ else {
//Sentencias
} ]


if(opcion==3){
System.out.println(Tres);
}
if (edad >= 18) {
System.out.println(Mayor);
}else{
System.out.println(Menor);
}


+
Sintaxis bsica de una oracin.
! SUJETO + VERBO + PREDICADO
! El nio juega en el patio.
! Yuceli reprueba la materia de base de datos.
! Me rio de los comentaristas de futbol.
! Cambiando la estructura.
! Juega en nio el el patio.
+
Definiendo gramticas en JavaCC.
! Definiendo la gramtica para el cuerpo principal del
programa.
<START> sentencias() <FINISH>
! Los Tokens (Lexemas) son utilizados para definir la
gramtica. (<START> y <FINISH>).
! Pero si la gramtica es compleja se puede dividir en sub-
gramticas, cuya apariencia es prcticamente como la de un
mtodo. (sentencias()).
! Si en una gramtica se invocan una o mas gramticas, estas
deben definirse sino mandara un mensaje de error.
+
Definiendo gramticas en JavaCC.
! Sintaxis para definir una gramtica en JavaCC:

valorRetorno nombreGramtica(Argumentos):
{
//Cdigo de java
} {
//Tokens y nombres de otras gramticas.
}

! En la parte de Token es posible insertar cdigo de
java utilizando:
! { //Sentencia; }
+
Definiendo gramticas en JavaCC.
! Ejemplo de una gramtica en JavaCC:

void cuerpoPrincipal( ):
{
Object o =null;
} {
<START> sentencias() <FINISH>
{ System.out.println(Ya se acabo); }
}

+
Definiendo gramticas en JavaCC.
! Utilizando partes opcionales.
! Las partes opcionales van entre [opcional ]

void declararVariables():
{
}
{
(<INTEGER | <DECIMAL> | <STRING> ) <ID>
[ <IGUAL> valores() ]
}
+
rbol gramatical
! Consiste en dibujar un diagrama que represente una
gramtica. En donde:
! Los crculos son Tokens
! Los rectngulos son otros arboles.
START sentencias FINISH
+
rbol gramatical
declararVaribles()
leerConsola()

You might also like