style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Lenguaje de programación

Buenos días foro:

Cuál es la forma en que puedo implementar un lenguaje de programación simple con java... solo unos cuantos if, variables sin tipo, bucles, variables locales, globales y algunas funciones simples?

He visto que existe algo llamado ANTLR, alguien lo ha implementado? Cómo lo puedo hacer...

De antemano, muchas gracias a todos por su tiempo

AdjuntoTamaño
123.PNG9.83 KB

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.

JavaCC

Podría comenzar por hacer el analizador sintáctico con javacc? Veo que aquí en la comunidad alguien desarrolla el lenguaje Ryz, su creador, podría ayudarme un poco en este tema ?

Gracias !

Alguien quien pueda

Alguien quien pueda orientarme?
Gracias

Específicamente lo que

Específicamente lo que necesito es lo siguiente:

Tengo una aplicación de escritorio con figuras que se pueden arrastrar por un área de trabajo, las cuales se pueden conectar a través de flechas:

[ Nodo1 ] ---------------> [Nodo 2]

Aparte, tengo una aplicación de escritorio la cual interpreta el diagrama de Nodos, cada nodo es una pantalla, de esta manera ya se que cuando le den (Siguiente) al Nodo1, mostraré la pantalla que Representa el Nodo2.
Lo que ahora necesito, es que cada nodo tenga programación, esto quiere decir por ejemplo que yo diga:
Si el Nodo2 recibe una flecha del Nodo1, entonces incrementa x variable y retorna un 3 (Por poner un ejemplo)

Lo que se me ocurre es hacer un lenguaje de programación que sea interpretado por java y asignar una función a cada nodo, de esta forma yo tendría la siguiente función (definida en pseudolenguaje)

function f_nodo2() {
    variable++;
    if (variable == 3) {
        return "BIEN";
    } else {
       return "_MAL";
    }
}

[ Nodo1 ] ---------------> [Nodo 2] (Cuando inicie, aplica la función: "f_nodo2")

Lo que no entiendo bien, es si tengo que desarrollar un compilador por entero, si tengo que desarrollar un intérprete, si puedo hacer esto directamente con java o Groovy y luego interpretar con alguna herramienta dicho código, vi algo de ANTLR pero no se qué onda :S

Me encuentro un poco perdido, agradecería infinitamente su orientación
Marco

Hola, respuesta "sencilla"

Hola, respuesta "sencilla" mejor embebe un lenguaje de programación existente y listo.

Te recomiendo Groovy, Jython, Ruby o ya en última instancia JavaScript.

A mi me parece que lo que quieres hacer es suficientemente complejo como para además agregarle la tarea de hacer una herramienta de lenguaje ( que sería en este caso un Reconoceder léxico -> analizados sintáctico -> Interprete | Compilador )

Si aún así insistes en tu empeño y quieres invertir algunos pesos, te recomiendo que compres el libro

"Language Implementation Patterns" de Terance Parr, autor de ANTLR la herramienta que mencionas.

http://pragprog.com/book/tpdsl/language-implementation-patterns

Este libro es una excelente guía para entender de una forma sencilla como funcionan las herramientas de lenguaje ( compiladores, maquinas virtuales, interpretes, analizadores etc. ) te da muy buenos fundamentos y ejemplo de como hacer todo este tipo de cosas.

Por ejemplo la pieza de código que pones no es nada trivial de implementar, por que tienes variables, alcances ( scopes ) , operadores y varias cosas más.

Por acá yo escribí un par de cosas sobre como iniciar un analizador léxico ( o era un tokenizer? ) y algunas ideas que hay detrás de Ryz que por cierto no fue escrito para nada de esta forma, pero que lo será para la versión beta

:)

Suerte

Lenguaje scripting? Implementación?

Gracias por tu respuesta Oscar, voy a buscar lo que me dices acerca de Ryz, sin embargo en este momento me interesa irme por el lado "sencillo" que como comentas es embeber un lenguaje existente para evitar re inventar la rueda (me gustaría meter Groovy),. otra pregunta, el lenguaje debe ser de scripting para la jvm?

No se si me puedas ayudar, pero lo que aún no me queda claro cómo puedo interpretar Groovy al momento de mostrar cada pantalla.
Te pongo el siguiente ejemplo para explicarme mejor:

[Nodo1]----------------->[Nodo2]----------------->[Nodo3]
var++;                    var++;                   var++;
function() {        
    print("hola");
}

Supongamos que meto Groovy:
Cómo saber que "var=3" al momento de estar interpretando el diagrama y llegar al Nodo3? Es posible el ejemplo?

Gracias por tu tiempo
Marco

ScriptEngineManager ?

Tendría que implementarlo así?

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

Al mismo tiempo que investigo, me estoy echando un chapuzón a Ryz ;) ... admirable !

Sí, básicamente puedes

Sí, básicamente puedes implementarlo así.

Dejas que el usuario escriba la lógica y luego tu la ejecutas desde tu aplicación.

Estas viendo Ryz?! :-o :D Solo ten en cuenta que no es un "ejemplo" de como hacer un compilador. Es un compilador sí, en el sentido estricto, pero no es la forma canónica de hacer las cosas.

Ahí me preguntas cuando tegas dudas :)

Cómo saber que "var=3" al

Cómo saber que "var=3" al momento de estar interpretando el diagrama y llegar al Nodo3? Es posible el ejemplo?

Si, si es posible. De hecho las herramientas de diseño de BPM por ejemplo o los workflows hacen este tipo de cosas.

Para pronto y como podría funcionar es así:

1.- Por cada diagrama crear una clase.
2.- Por cada actividad ( o nodo ) creas un método
3.- Cuando se salve el diagrama generas la clase
4.- Para definir variables de instancia puedes permitir que se modifique el nodo de inicio ( por ejemplo )

Entonces, lo "único" que tendrías que hacer después es que al ejecutar el diagrama, tendrías que cargar la clase generada y ejecutarla.

Entonces este diagrama:

Se convertiría en:

// pseudo groovy :
class Ejemplo {
    x = 0
   def nodo1()  {
       x++
    }
    def nodo2() {
       x++
    }
    def nodo3() {
       x++
    }
}

Y al ejecutar creas una instancia de esta clase y ejecutas todos los método

    var e = new Ejemplo()
    e.nodo1()
    e.nodo2()
    e.nodo3()

Esa es la idea.

Ahí me avisas si sigues trabajando en esto, quizá te pueda ayudar en algún momento.

Saludos.

Por cierto, hoy encontré este

Por cierto, hoy encontré este link acerca de Programación basada en flujos . Se ve interesante y parece que es similr a lo que quieres.

http://en.wikipedia.org/wiki/Flow-based_programming

Llegue ahí siguiendo un proyecto llamado GoFlow que es una implementación usando Go.

https://github.com/trustmaster/goflow

Puede ser interesante

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">