Ir al contenido


Foto

ejecutar función externa


  • Por favor identifícate para responder
7 respuestas en este tema

#1 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 25 octubre 2010 - 12:59

Hola foro. amigos estoy intentando realizar un ejecutable con algunas características parecidas al MATLAB.
Una de las necesidades que tengo es la de poder ejecutar una función que me de un usuario.
Ejemplo: El usuario escribe en un fichero.

double suma (int a, int b){
    return a+b;
}
guarda el fichero como: "algo.extencion"

luego mi programa se encargara de obtener la mayor suma entre los parámetros que se pasan: ejemplo el usuario pone 4 pares de números:
4,5,8,9,74,4,2
y se encarga de analizar la función del usuario que es sumar los dos primeros y obtener el resultado de la suma y luego hacer operaciones con los resultados. Como ven esta función es sencilla, seria sumar dos números. Pero yo no se que mas se le pueda ocurrir a un usuario (mírenlo como una calculadora inteligente o un compilador, yo solo tengo un botón para procesar información, pero esa información es una función del usuario.). Espero me puedan entender. Tambien tengo presente que le devuelvo al usuario el miso tipo de valor: si es double devuelvo double (de echo tengo pensado que siempre sea double y los parámetros y su cantidad también serán los mismos, lo que puede variar es el contenido de la función).
Saludos y gracias

  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 25 octubre 2010 - 01:25

Lo que pretendes realizar es un lenguaje interpretado, ifrit. No es sencillo.

Primero tendrás que establecer unas reglas férreas de sintaxis y limitar las funciones, procedimientos o "acciones" que puede realizar el usuario, para luego analizar su código comparándolo con una serie de palabras claves o reservadas para este lenguaje que pretendes crear.

Saludos.
  • 0

#3 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 mensajes
  • LocationMaracaibo

Escrito 25 octubre 2010 - 02:46

a ver... Yo en Java usaría ANTLR

No sé en qué lo harás pero las bibliotecas para ello son LEX, FLEX, YACC -> http://dinosaur.compilertools.net/

Tal como dice el compañero escafandra debes definir tus elementos léxicos (palabras calves, números, operadores, etc) y reglas de producción que definan tu sintaxis.

Algo así como

arch_funcion -> funcion cadena(tipo cadena, ...) { instruccion, instruccion, etc. }
instruccion -> cadena = exp
instruccion -> return exp
instruccion -> if(exp) { instruccion, instruccion, etc. }
exp -> exp operador exp

Recomiendo buscar por ahí el libro de compiladores de Ullman y Aho

en google ubiqué este libro prueba a ver http://books.google....epage&q&f=false
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 octubre 2010 - 03:03

Hola, Desconozco C/C++ pero al menos para Delphi hay bibliotecas externas especializadas en cosas como éstas. Ofrecen un entorno en el que se puede desarrollar una gramática, algunas expresiones regulares, interpretan el script y lo ejecutan.

Puede que exista algo parecido para C/C++.

Saludos,
  • 0

#5 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 26 octubre 2010 - 05:12

Gracias amigos por responder este tema, no llegue a imaginar que fuese tan complicada ni trabajosa la tarea. Pero leyendo algunas cosas y sumandole las sugerencias que me dan, veo la cosas algo complicada. Por suerte lo que pretendo hacer es casi analizar funciones que siempre tendrán parámetros similares y también las tareas que realizaran. Seguiré desarrollando el tema y luego les comentare que tal me ha ido. Muy agradecido y saludos
  • 0

#6 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 mensajes
  • LocationMaracaibo

Escrito 26 octubre 2010 - 08:43

Gracias amigos por responder este tema, no llegue a imaginar que fuese tan complicada ni trabajosa la tarea. Pero leyendo algunas cosas y sumandole las sugerencias que me dan, veo la cosas algo complicada. Por suerte lo que pretendo hacer es casi analizar funciones que siempre tendrán parámetros similares y también las tareas que realizaran. Seguiré desarrollando el tema y luego les comentare que tal me ha ido. Muy agradecido y saludos


El área de lenguajes formales y compiladores es fundamental en la formación de un computista. Lo que quieres hacer no es tan complicado usando las herramientas que te señalé y extendiendo un poco las reglas de producción que listé.

Yo te recomiendo hacer este ejercicio y créeme que te dará una mejor visión de lo que hacen los compiladores que usamos todos los días.

Saludos
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 26 octubre 2010 - 08:52

Yo te recomiendo hacer este ejercicio y créeme que te dará una mejor visión de lo que hacen los compiladores que usamos todos los días.

Saludos

¿Lo que tu propones es que se "fume" el "libro del dragón" y se ponga a tiro con LEX y YACC y termine desarrollando un mini-compilador?
No discuto que es una alternativa y dentro de todo viable.
El punto es que quizá esto termine complicando más las cosas y destinandose un esfuerzo para algo que quizá no tenga tanto peso a comparación con el resto de la aplicación.

Por ello yo proponía la posibilidad de emplear alguna biblioteca o framerork ya hecho que aporte dicha funcionalidad. Seguramente debe haber algo.

Saludos,
  • 0

#8 ifrit

ifrit

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 105 mensajes
  • LocationLa Habana, Cuba

Escrito 26 octubre 2010 - 10:25

Muchas gracias Delphius y jorgeu.
Yo realmente no pretendo crear un compilador, sino un "mini-compilador" bastante ajustado a mis necesidades y que interprete en un rango bastante reducido. Creo que las dos sugerencias me vienen bien para ir entrando en tema. Ahora, si encuentran algun framework o componente que tenga alguna de estas funcionalidades, me parece muy bien.
Muchas gracias amigos y saludos
  • 0




IP.Board spam blocked by CleanTalk.