¿Analizador lexicografico, sintáctico y generación de código?

hola, tengo que hacer un mini compilador para el siguiente lenguaje:
Principal{
Imprime("cadena");
}
Tomando en cuenta que Imprime("cadena"); puede estar muchas, una o ninguna veces.

Lo empecé en java.

y llevo esto:

import java.útil.regex.Matcher;
import java.útil.regex.Pattern;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.IOException;


public class proyecto {
public static void main(String[] args){
try{
FileInputStream fis = new FileInputStream("prueba.txt");
BufferedReader buffer = new BufferedReader(new InputStreamReader(fis));
String linea;
String texto="";
String textoAcp;
while((linea = buffer.readLine()) != null){
texto+=linea;
}
fis.close();
textoAcp=texto;
texto=texto.replaceAll("\\es", "");
Pattern pt = Pattern.compile("^Principal\\{(Imprime\\(\"[^\"]*\"\\);)*\\}$");
Matcher mt = pt.matcher(texto);
if(mt.matches()){
System.out.println("No se encontraron errores");
System.out.println("Se ha generado código objeto de java en el archivo salida.class");
String [] mensajes = textoAcp.split("\"");
//se genera código
String codGen = "class salida {\n\tpublic static void main(String [] args){\n";
for(int i=1; i<mensajes.length; i+=2){
codGen+="\t\tSystem.out.println(\""+mensajes+"\");\n";
}
codGen+="\t}\n}";
//System.out.println(codGen);
PrintStream pues = new PrintStream(new FileOutputStream("salida.java"));
ps.println(codGen);
ps.close();
try{
Runtime.getRuntime().exec("javac salida.java");
}catch (IOException ioe){
System.err.println ("Ocurrio un error: " + ioe.getMessage());
}
}else{
System.out.println("Errores de sintaxis");
}
}catch (Exception e){
System.err.println("Ocurrio un error: " + e.getMessage());
}
}
}

Tengo duda sobre como podría verificar los errores y mostrar en que linea y porque se generó el error; y también no se como generar código objeto directamente :(

Espero me puedas ayudar ñ.ñ

1 Respuesta

Respuesta
-1

Utiliza el software en el que se creo el programa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas