Pregunta

Estoy creando un juego en XNA y estaba pensando en crear mi propio lenguaje de scripts (extremadamente simple que la mente). Sé que hay mejores maneras de hacer esto (y que estoy reinventar la rueda), pero quiero que la experiencia de aprendizaje más que sea productivo y rápido.

Cuando se enfrentan con el código en tiempo de ejecución, por lo que entiendo, el enfoque habitual es analizar en un código máquina o código de bytes o alguna otra cosa que en realidad es ejecutable y luego ejecutar eso, ¿verdad? Pero, por ejemplo, cuando Chrome salió por primera vez dijeron que su motor de JavaScript fue rápido, ya que compila el código JavaScript en código máquina. Esto implica otros motores no se compilan en código máquina.

Yo prefiero no la compilación en un lenguaje más baja, por lo que ¿hay alguna modernas técnicas conocidas para el análisis y la ejecución de código sin compilar a bajo nivel? Tal vez algo así como analizar el código en una especie de árbol, a través de la ramificación del árbol, y la comparación de cada símbolo y llamar a alguna función que se encarga de ese símbolo? (Wild adivinar y punzante en la oscuridad)

¿Fue útil?

Solución

Yo personalmente no rodar su propio analizador (girando la entrada en tokens) o léxico (comprobación de las señales de entrada para su gramática de la lengua). Echar un vistazo a antlr para el análisis / léxico - que es un gran marco y tiene el código fuente completo si quieres profundizar en las entrañas de la misma.

Para ejecutar el código que ha analizado sintácticamente, me vería en funcionamiento una máquina virtual simple o aún mejor vistazo a llvm que es un intento de código abierto (más o menos) para estandarizar el formato de código de bytes de máquina virtual y proporcionar características agradables como JITing (convertir su script compilado el código de bytes en el conjunto).

Yo no te desanime de las opciones más avanzadas que la máquina tales como la ejecución de código máquina nativo pero hay que tener en cuenta que esta es un área muy especializada y compleja obtiene muy, muy rápido!

Earlz señaló que mi respuesta podría parecer implicar 'no se molestan en hacer esto por sí mismo. Al volver a leer mi post que hace sonar un poco de esa manera. La razón por la que menciona antlr y LLVM es que ambos tienen un montón de código fuente y tutoriales, así que siento que esta es una buena fuente de referencia. Tomarla como base y jugar

Otros consejos

Puede probar este marco para la construcción de idiomas (que funciona bien con XNA): http://www.meta-alternative.net/mbase.html

Hay algunos tutoriales: http://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

Python es grande como un lenguaje de script. Yo recomendaría que hagas una C vinculante para su API C # y utiliza eso. Empotrado de Python es fácil. La aplicación puede definir funciones, tipos / clases y variables dentro de módulos que el intérprete de Python puede acceder. La aplicación también puede llamar a funciones en scripts de Python y obtener un resultado de nuevo. Estas dos características combinadas le da un esquema de comunicación de dos vías.

Básicamente, se obtiene la sintaxis y la semántica del pitón de forma gratuita. Lo que se necesita para poner en práctica es la API de su aplicación expone a Python. Un ejemplo podría ser el acceso al juego de funciones lógicas y hacer funciones. scripts de Python se definen a continuación, que llama a estas funciones, y la aplicación host invocaría las funciones de Python (con parámetros) para realizar su trabajo.

EDIT: Parece que IronPython puede ahorrar aún más el trabajo. Es una aplicación de C # CPython, y tiene su propia API incrustación: http://www.ironpython.net/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top