Software Guru Conference & Expo 2014

compilador

tengo una duda acerac de los compiladores, como se puede realizar uno con el lenguaje java o que tutorials me recomiendan

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Compiladores

Para realizar un Compilador no es una tarea tan sencilla de realizar.

Por ejemplo tener "un almacen de palabras reservadas" de un lenguaje de programación como Java,C, etc.

Un pequeño ejemplo:

Function contenedor(Cadena texto)
Cadena palabras[]={"void","long","main","for","if","printf","scanf",....};//
//...
//...
End Function

A mi criterio se requiere gran conocimientos de programación no es nada fácil (¿Te lo dejaron de tarea?).

Explicación for Dummies;un compilador debe leer instrucción x instrucción, determinar si estan bien escritos y si corresponden al lenguaje de programación, entre otras actividades más complejas.

Puedes checar estos link (gracias Wikipedia):

Si lo vas hacer en Java te recomiendo buscar las palabras reservadas del lenguaje, estudiar la síntaxis y estructuras de control del lenguaje.

Imagen de OscarRyz

Tu petición es algo

Tu petición es algo abierta. Si especificas un poco más que es lo que quieres, quizá se te pueda ayudar mejor.

Es decir, quieres saber que es un compilador?
Quieres escribir uno tu mismo? Si es así, tienes algún lenguaje en mente?, Alguna arquitectura destino en mente?

Etc. Este es un tema muy grande.

Empieza leyendo la entrada en la Wikipedia http://es.wikipedia.org/wiki/Compilador

Hay herramientas que te ayudan a escribir algunas partes de un compilador en Java:

ANTRL - http://www.antlr.org/
JavaCC - https://javacc.dev.java.net/

Eclipse tiene un proyecto para escribir lenguajes con soporte en eclipse mismo.

Xtext - http://www.eclipse.org/Xtext/documentation/helios/new_and_noteworthy.php

Y Jetbrains ( los creadores de IDEA ) tienen algo similar pero para lenguajes de dominio especifico

Meta Programming System - http://www.jetbrains.com/mps/

la verdad si es una tarea y

la verdad si es una tarea y necesito informacion al respecto ya busque un poco en google pero siento que aun no es suficiente. ah y gracias por el aporte

pues las dos cosas necesito

pues las dos cosas necesito saber sobre los compiladores y de paso realizar uno, no la gran cosa pero si un pequeño ejemplo

Imagen de OscarRyz

En ese caso el link de

En ese caso el link de wikipedia es muy bueno para empezar.

A grandes rasgos ( y en mis propias palabras ) para hacer un compilador tienes que hacer

1.- Una analizador léxico. El que dice si tu lenguaje está bien.
2.- Un analizador semántico. El que dice si lo que está bien escrito, tiene sentido.
3.- Un generador de código. Lo que los otros dos ya vieron que está bien, generalo en código de máquina o en otro lenguaje intermedio ( ejemplo javac, genera un lenguaje intermedio llamado bytecode ).

Así por ejemplo podrías con Java hacer un mini-micro-chafi lenguaje que se llamara "Hola mundo" que tuviera una sola instrucción: "Hola: " y que recibiera a quién iba a saludar.

Obvio esto es un ejemplo muy burdo, pero presenta las partes principales.

import java.io.*;

public class HolaCompiler {
        public static void main( String []  args ) throws IOException {
                String program = args[0];
                // analizador lexico/semantico
                if( program.startsWith("Hola:") ){
                        String [] parts = program.split("Hola:");
                        if( parts.length != 2 ) {
                                System.err.println("Invalid syntax: "+ program );
                        }
                        String name = parts[1];
                        // Generacion de código
                        String codeGeneration = "class "+name+" {\n public static void main(String [] args ){\n System.out.println(\"Hola "+name+", como estas?\");\n }\n}";
                        PrintStream ps = new PrintStream( new FileOutputStream( name + ".java") );
                        ps.println( codeGeneration );
                        ps.close();
                        ProcessBuilder pb = new ProcessBuilder("javac", name+".java");
                        pb.start();
                }
        }
}

Así, podríamos llamar al compilador pasandole en la linea de comandos su programa:

java HolaCompiler  "Hola: Oscar"

Este chafi compilador generaría el código objetivo que sería un .class:

Oscar.class que podríamos ejecutar con Java:

java Oscar
Hola Oscar, como estas?

Obvio, entre más largo y complejo el lenguaje de programación, más largo y complejo es el compilador.

Hay muchísimo más, sobre esto.

Un libro que presenta un ejemplo muy fácil de seguir es "The UNIX programming Environment" en su ultimo capitulo habla sobre como hacer un lenguaje y usar las herramientas que vienen en el sistema operativo ( lo hacen con C )

Otro libro fácil de leer es "Create your own programming language" que explica los conceptos básicos de una manera muy fácil, y sirve de forma introductoria.

Para cosas más avanzadas estan los links que te puse antes y está el famoso libro del dragon

Espero que con eso se te quiten las ganas, digo, espero que eso te sirva de inicio.

gracias por la ayuda, lo

gracias por la ayuda, lo tendre en cuenta