Crear un compilador en java
Buenas noches quisiera que me orientaran para hacer un compilador en java que me value si es correcta o no esta sintaxis:
import java.io.*;
osea esta libreria si me puedieran orientar se los agradeceria ya que tengo que entregarlo a mas tardar el martes de esta semana .
- Inicie sesión o regístrese para enviar comentarios
Mira esta respuesta
Mira esta respuesta anterior:
http://www.javamexico.org/blogs/gelo1002/compilador
Ahí vienen ligas a otras respuestas sobre este mismo tema.
Revisalas.
Soy nuevo en Programacion
La Teoria ya la tengo pero soy malo en la logica para esto porque me resultan muchas dudas como validar los espacios en blanco, los caracteres puntos y comas, nose quisiera ver un codigo fuente para esto porque si me resulta dificil :s
Postea lo que llevas y en que
Postea lo que llevas y en que necesitas ayuda y quizá así sea mucho más fácil ayudarte.
No creo que le sirva de mucho
No creo que le sirva de mucho la ayuda @Oscar... lo tenía que entregar HOY! HOY! HOY! .....
Lo que se me ocurre es que
Lo que se me ocurre es que tomes el código de algún compilador open source y obtengas la parte que hace eso.
Por ejemplo, esté es el fuente del JDK
http://hg.openjdk.java.net/
: - )
Bueno ya avanze
Si ya pude hacer algo pero ahora el maestro me pidio una validacion mas que nose como hacerla quiere que dentro de mi copilador que lo que hace es evaluarme System.out.print("Hola Mundo"); y me dija si es valida o no.
Ahora lo que quiere que haga me q valide System.out.print("Hola Mundo" + c); ahora con una variable.
Este es mi codigo del compilador
import java.util.Scanner;
public class compilador
{
static String cadena;
static String cadena2;
static String [] divides;
static String [] divides2;
static String [] divides3;
static boolean b;
static boolean a;
static boolean c;
static boolean d;
static boolean e;
static boolean f;
static boolean g;
static boolean h;
static int a2;
static int puntosycomas=0;;
public void sintaxis()throws IOException
{
Scanner leer=new Scanner(System.in);
System.out.println("\nValua si es correcto o incorrecto un: System.out.print(''Hola Mundo'');");
System.out.println("Introduce tu cadena a validar:");
cadena = leer.nextLine();
char []dividecaracteres=cadena.toCharArray();
divides=cadena.split("\\.");
divides2=cadena.split("\\(");
cadena2=divides2[0];
divides3=cadena2.split("\\.");
/////////////////////////////////////////////////////////////////////////////////////////////
for(int i=0;i<divides.length;i++){
if(i==0){
if(divides[0].equals("System")){
a=true;
}
}
if(i==1){
if(divides[1].equals("out")){
b=true;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
if(divides.length==0){
}else
for(int p=0;p<divides3.length;p++){
if(p==2){
if(divides3[p].equals("print")){
c=true;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
for(int l=0;l<dividecaracteres.length;l++){
if(l==16){
if(dividecaracteres[16]=='('){
d=true;
}
}
if(l==17){
if(dividecaracteres[17]=='"'){
e=true;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
for(int j=0;j<dividecaracteres.length;j++){
if(dividecaracteres[j]==')'){
a2 = j;
f=true;
}
}
///////////////////////////////////////////////////////////////////////////////////////
int comillas=0;
int comilla2=a2-1;
for(int w=0;w<dividecaracteres.length;w++){
if(dividecaracteres[w]=='"'){
comillas++;
}
}
if(comillas>=3){
g=false;
e=false;
}
else{
for(int u=0;u<dividecaracteres.length;u++){
if(u==comilla2){
if(dividecaracteres[u]=='"'){
g=true;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
int puntocoma=a2+1;
int lol=puntocoma+1;
if(dividecaracteres.length!=lol){
h=false;
}
else{
for(int z=0;z<dividecaracteres.length;z++){
if(z==puntocoma){
if(dividecaracteres[z]==';'){
h=true;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
if(a==true&&b==true&&c==true&&d==true&&e==true&&f==true&&g==true&&h==true){
System.out.println("\nSintaxis Correcta");
}else{
System.out.println("\nSintaxis Incorrecta");
}
}
}
Codigo
No se porque no me aparece todo el codigo x.x
Quizá...
Quizá puedas poner el código entre los tags de "code" o subirlo a pastebin (http://pastebin.com/)
Quizá sea que para un comentario son muchas letras.
Saludos!
Ya arreglé el código,
Ya arreglé el código, recuerda ponerlo entre los tags <code>
Bueno, difícilmente se podría llamar a lo que tienes un "compilador" , aunque sinceramente la definición de "compilador" es bastante amplia.
En todo caso eso se parece mucho más al parseador / tokenizer del compilador.
Volviendo a tu pregunta, deberías de primero ( esto es lo tradicional ) separar la entrada por tokens ( cosas, partes, elementos como le quieras llamar ) donde cada token es de cierto tipo. Y luego aplicar una regla a la secuencia de tokens para ver si es válida o no.
Entonces, tus reglas deberían de ser que debes de separar por todos los signos:
. ( ) + " ;
y cualquier cosa que este entre ellos es un token distinto.Entonces la entrada:
Tendría los tokens:
Y la entrada:
Tendrá los tokens:
Porque "Hola Mundo" y c están separados por un "+" correcto?
Luego que tengas esta cadena, este flujo, lo que tienes que hacer es aplicar una regla para ver si tiene sentido. Por ejemplo en Java lo siguiente tiene tokens válidos pero la sintáxis no es válida:
Los tokens serían:
Que en esencia son los mismos tokens, pero en diferente orden. Lo que hay que hacer ahí es decir que después de un punto no puede ir un parentesis o que después de un punto y coma no puede ir una cadena.
En fin eso es la base, como hacerlo varía mucho pero primero tienes que tener claro que vas a hacer.
Leete los post que puse anterioremente y vuelve a preguntar más.
Saludos.
Duda
No me quedo muy claro lo ultimo @Oscar si me pudieras dar algo mas detallado o algun ejemplo mas especifico para hacerlo , algun codigo fuente porfas :/
Claro. Da click
Claro.
Da click aquí y sigue los links hasta que encuentres el código fuente
http://www.javamexico.org/foros/javamexico_20/crear_un_compilador_en_jav...
¿?
Sigo en las mismas bueno gracias aver que pasa