GRAMÁTICAS DESCRIPTIVAS


void sintac() : {}
{try
    { CUERPO() }
catch(ParseException e){
System.out.println("Error en el programa");
archSint_escribe(e.getMessage());
}}

void CUERPO() : {}
{try
    { (BLOQUE_ATRIBUTOS())+ CONSTRUCTOR() (PRINCIPAL())? (FUNCION())* }
catch(ParseException e) {
System.out.println("Error en el cuerpo de clase");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void BLOQUE_ATRIBUTOS() : {}
{try
    { (DECLARACION())+ }
catch(ParseException e) {
System.out.println("Error en bloque de atributos");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void DECLARACION() : {}
{try
    { }
catch(ParseException e) {
System.out.println("Error en las declaracion");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void CONSTRUCTOR() : {}
{try
    { INICIALIZACION() ("," INICIALIZACION())* }
catch(ParseException e) {
System.out.println("Error en el constructor");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}


void TERMINO() : {}
{try
    { ( | | | ) (OPER_ARI() TERMINO())?   }
catch(ParseException e) {
System.out.println("Error en termino");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void INICIALIZACION() : {}
{try
    { TERMINO() }
catch(ParseException e) {
System.out.println("Error en las inicializacion");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void PRINCIPAL() : {}
{try
    { ()? ARGUMENTO() ("," ARGUMENTO())* (INSTRUCCION())* }
catch(ParseException e) {
System.out.println("Error en main");
archSint_escribe(e.getMessage());
Token t;
do{    t = getNextToken();
}
     while( t.kind != puncoma & t.kind != EOF);
}}

void ARGUMENTO() : {}
{try
    { ( | ) }
catch(ParseException e) {
System.out.println("Error en argumento");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while( t.kind != puncoma & t.kind != EOF);
}}

void INSTRUCCION() : {}
{try
    {  (DECLARACION()) | (ASIGNACION()) | (SELECCION()) | (ITERACION()) | (WHILE()) | (CALLFUNCION())  }
catch(ParseException e) {
System.out.println("Error en la instruccion");
archSint_escribe(e.getMessage());
archSint_escribe("Error en la instruccion");
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void ASIGNACION() : {}
{try
    { ( TERMINO() ) }
catch(ParseException e) {
System.out.println("Error en la asignacion");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void OPER_REL() : {}
{try
    { ( | | ) }
catch(ParseException e) {
System.out.println("Error en la asignacion");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void SELECCION() : {}
{try
    { EXPR_REL() (INSTRUCCION())* }
catch(ParseException e) {
System.out.println("Error en la sentencia seleccion 'if' ");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void ITERACION() : {}
{try
    { TERMINO()
      EXPR_REL()
       (|) (INSTRUCCION())+ }
catch(ParseException e) {
System.out.println("Error en la sentencia de iteracion 'for' ");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void WHILE() : {}
{try
    { ( EXPR_REL() (INSTRUCCION())+ ) }
catch(ParseException e) {
System.out.println("Error en while");
archSint_escribe(e.getMessage());
archSint_escribe("Error en la sentencia de iteracion while ");
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void CALLFUNCION() : {}
{try
    { ( TERMINO() (( TERMINO())+)? ) }
catch(ParseException e) {
System.out.println("Error operador logico");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void EXPR_REL() : {}
{try
    {  (TERMINO() OPER_REL() TERMINO()) }
catch(ParseException e) {
System.out.println("Error en la expresion relacional ");
archSint_escribe(e.getMessage());
archSint_escribe("Error en la expresion relacional ");
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void OPER_ARI() : {}
{try
    { ( | | |
| ) }
catch(ParseException e) {
System.out.println("Error en operacion aritmetica");
archSint_escribe(e.getMessage());
archSint_escribe("Error operador aritmetico");
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void EXPR_ARI() : {}
{try
    { (TERMINO() OPER_ARI() TERMINO()) }
catch(ParseException e) {
System.out.println("Error en la expresion aritmetica ");
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void OPER_LOG() : {}
{try
    { ( | ) }
catch(ParseException e) {
System.out.println("Error operador logico");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}

void FUNCION() : {}
{try
    { ("," )* (INSTRUCCION())* }
catch(ParseException e) {
System.out.println("Error en la funcion");
archSint_escribe(e.getMessage());
Token t;
do{
     t = getNextToken();}
     while(t.kind != puncoma & t.kind != EOF);
}}