Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

ayuda con compilador

suvivor

Bovino maduro
Desde
18 Ene 2009
Mensajes
176
amigos me pudieran ayudar necesito un compilador semantico de javacc pero para c++ o q valide cualquier cadena si alguien tiene el codigo x favor de ayudarme :(
 
Del estilo "hagan mi tarea..." -_-

Pero qué crees? Aquí no hacemos tareas.

Mejor investiga al respecto y si tienes dudas específicas, seguro más de un bakuno intentará ayudarte.
 
ohh muchas gracias compañero.... de todas maneras aki les dejo un código el cual no puedo compilarlo por que me salen errores... ya lo eh revisado y no entiendo el error ojala y puedan ayudarme

PARSER_BEGIN(comp)
class comp
{
public static void main( String[] args )throws ParseException
{
try
{
comp analizador = new comp( System.in ) ;
analizador.Programa() ;
}
catch(ParseException e)
{
System.out.println(e.getMessage());
System.out.println("Analizador: Se han encontrado errores en el analisis.");
}
}
}
PARSER_END(comp)

SKIP :
{
" "|"\n" | "\r" | "\r\n"
}
TOKEN:
{
<TYPES:"inum"|"idec"|"istr"|"ichr">{System.out.println("ENTERO -> "+image);}
| <NUMBER : (["0"-"9"])+ > {System.out.print("NUMERO "+image+"\r\n");}
| <IDENTIFIER : ["a"-"z","A"-"Z"](["a"-"z","A"-"Z","0"-"9","_"])*> {System.out.print("IDENTIFICADOR -> "+image+"\r\n");}
| <CADENA : ["a"-"z","A"-"Z","0"-"9"](["a"-"z","A"-"Z","0"-"9"])*>{System.out.print("CADENA -> "+image+"\r\n");}
}
TOKEN :
{
<ASIGNACION : "= "> {System.out.println("ASIGNACION -> "+image+"\r\n");}
| <PLUS : "+" > {System.out.println("MAS -> "+image+"\r\n");}
| <MINUS:"-">{System.out.println("MENOS -> "+image+"\r\n");}
| <MULTIPLY:"*">{System.out.println("MULTIPLICAR -> "+image+"\r\n");}
| <DIVIDE:"/">{System.out.println("DIVIDIR -> "+image+"\r\n");}
| <INCR: "++" >{System.out.println("INCREMENTO -> "+image+"\r\n");}
| <DECR: "--" >{System.out.println("DECREMENTO -> "+image+"\r\n");}

}
TOKEN:
{
<MAIN: "public static void Main() ">{System.out.println("MAIN -> "+image);}
| <PROGRAMA: "Programa " > {System.out.println("PROGRAMA -> "+image);}
| <IF: "ien " >{System.out.println("IF -> "+image);}
| <ELSE:"iotro " >{System.out.println("ELSE -> "+image);}
| <ELSEIF:"ien_otro " >{System.out.println("ELSE IF -> "+image);}
| <FOR:"irepetir " >{System.out.println("FOR -> "+image);}
| <SWITCH:"ialternativa " >{System.out.println("SWITCH -> "+image);}
| <CASE:"iopcion " >{System.out.println("CASE -> "+image);}
| <BREAK:"itermina " >{System.out.println("BREAK -> "+image);}
| <DEFAUL:"ipredef " >{System.out.println("DEFAUL -> "+image);}
| <DO:"ia " >{System.out.println("DO -> "+image);}
| <WHILE:"iespera " >{System.out.println("WHILE -> "+image);}
| <WRITE:"iescribir " >{System.out.println("WRITE -> "+image);}
| <READ:"ileer " >{System.out.println("READ -> "+image);}
}
TOKEN:
{
<LPAREN: "(" >{System.out.println("IPAREN -> "+image);}
| <RPAREN: ")" >{System.out.println("DPAREN -> "+image);}
| <LBRACE: "{" >{System.out.println("ILLAVE -> "+image);}
| <RBRACE: "}" >{System.out.println("DLLAVE -> "+image);}
| <LBRACKET: "[" >{System.out.println("ICORC -> "+image);}
| <RBRACKET: "]" >{System.out.println("DCORC -> "+image);}
| <SEMICOLON: ";" >{System.out.println("PUNTO Y COMA -> "+image);}
| <COMMA: "," >{System.out.println("COMA -> "+image);}
| <DOT: "." >{System.out.println("PUNTO -> "+image);}
}
TOKEN:
{
<EQ: "==" >{System.out.println("IGUALACION -> "+image);}
| <LE: "<=" >{System.out.println("MENOR O IGUAL -> "+image);}
| <GE: ">=" >{System.out.println("MAYOR O IGUAL -> "+image);}
| <NE: "!=" >{System.out.println("DIFERENTE -> "+image);}
| <OR: "||" >{System.out.println("OR -> "+image);}
| <AND: "&&">{System.out.println("AND -> "+image);}
}

void Programa() :
{}
{
<PROGRAMA><IDENTIFIER><LBRACE>Bloque()<RBRACE><EOF>

}
void Bloque():
{}
{
DeclaracionGlobal() | Principal()
}
void DeclaracionGlobal():
{}
{
<TYPES>VariablesGlobales()
}

void VariablesGlobales():
{}
{
/*<IDENTIFIER>", "<IDENTIFIER> |*/ <IDENTIFIER> <SEMICOLON> W()
}
void W():
{}
{
DeclaracionGlobal() | Principal()
}

void Principal():
{}
{
<MAIN>
<LBRACE>Sentencias()<RBRACE>
}

void DeclaracionLocal():
{}
{
<TYPES>VariablesLocales()
}
void VariablesLocales():
{}
{
/*<IDENTIFIER>", "<IDENTIFIER> | */<IDENTIFIER> <SEMICOLON> VS()
}

void VS():
{}
{
DeclaracionLocal() | Sentencias()
}

void Sentencias():
{}
{
(
DeclaracionLocal()
| SentenciaIf()
| SentenciaFor()
| SentenciaDo()
| SentenciaAsignacion()
| SentenciaWrite()
| SentenciaRead()
|<EOF>
//| SentenciaSwitch()
/*| Sentencias() Left Recursion: Poner Sentencias() a la finalizacion de cada metodo?*/
)*
}

//Sentencia IF
void SentenciaIf():
{}
{
<IF><LPAREN> A() <RPAREN> <LBRACE> Sentencias() <RBRACE> /*|
"ien " "( " A() ") " "{ "Sentencias()"} ""Sino "*/
}
/*void Sino():
{}
{
"iotro " "{ "Sentencias()"} "
}*/
void A():
{}
{
Comparaciones()
/*| Comparaciones() "&& " Comparaciones()
| Comparaciones() "|| " Comparaciones()*/
}
//Fin sentencia if

void Comparaciones():
{}
{
Valor()Operadores()Valor()
}
void Valor():
{}
{
<IDENTIFIER> | <NUMBER> /*| Expresion()*/
}
void Expresion():
{}
{
/*<NUMBER> | <IDENTIFIER> |*/ <IDENTIFIER><PLUS><IDENTIFIER><SEMICOLON> /*| <NUMBER> OpAritmetico() <NUMBER> |
<IDENTIFIER> OpAritmetico() <IDENTIFIER>|
<IDENTIFIER> OpAritmetico() <NUMBER> | <IDENTIFIER> */
}

void Operadores():
{}
{
<EQ> | <LE> |<GE>|<NE>
}
void OpAritmetico():
{}
{
<PLUS>|<MINUS>|<MULTIPLY>|<DIVIDE>
}
//Sentencia FOR
void SentenciaFor():
{}
{
<FOR> <LPAREN> SentenciaAsignacion() <SEMICOLON> Comparaciones() SentenciaAsignacion() <RPAREN> <LBRACE> Sentencias() <RBRACE>/*|
"irepetir " "( " SentenciaAsignacion() "; " Comparaciones() SentenciaAsignacion() ") " "{ " Sentencias() "} "Sentencias()*/
}

//Sentencia DO
void SentenciaDo():
{}
{
<DO> <LBRACE>Sentencias() <RBRACE> <WHILE> <LPAREN> Comparaciones() <RPAREN> /*|
"iespera " "( " Comparaciones() ") " "{ " Sentencias() "} " */
}

//Sentencia ASIGNACION
void SentenciaAsignacion():
{}
{
<IDENTIFIER> <ASIGNACION> Expresion()
}

//Sentencia WRITE
void SentenciaWrite():
{}
{
<WRITE> <LPAREN> Expresion() <RPAREN> <SEMICOLON> /*|
"iescribir " "( " "^ " <CADENA> "^ " ") " "; "*/
}

//Sentencia READ
void SentenciaRead():
{}
{
<READ><LPAREN><RPAREN><SEMICOLON>
}
 
Palabra: DEFAUL? no es DEFAULT?. Las sentencias deben ser en mayusculas?

Saludos!!! :metal:
 
son para diferenciarlas... no perjudican en nada la compilacion.. la palabra amm no la encuentro pero gracias
 
Volver
Arriba