2012-01-15 10 views
11

Sé que hay algunas preguntas flotando por aquí sobre el tema, pero fue difícil encontrar algo útil para lo que busco ...tutoriales o introducciones para escribir un lenguaje de scripting simple?

También sé que probablemente terminará siendo la tarea de completo, pero realmente quiero hacer un lenguaje de scripting simple para los motores de juego ... Quiero usarlo en C++ y en mis motores de juegos Java de Android ... pero no sé por dónde empezar ... Lo he intentado buscando tutoriales en línea, pero mucho requiere convertir cosas en código de bytes, máquinas virtuales y cosas así ...

Realmente solo quiero crear un lenguaje de scripting simple que pueda leerse desde el motor, tenga un simple "if/else" "lógica ... funciones simples que se pueden invocar desde otros scripts y demás ... Tal vez incluso s Implementar para las primeras versiones ... Realmente no sé por dónde empezar, pero sé que esto es algo que necesito para comenzar a estudiar y comprender.

Si alguien puede señalarme en la dirección correcta y señalar algunos enlaces a "hacer un lenguaje de scripting simple para juegos" muy simple o incluso señalar algunos conceptos clave que debería considerar ... I ' estar muy agradecido

Prefiero un lenguaje de scripting basado en C minimalista, pero supongo que los detalles entrarán una vez que haya aprendido más sobre él.

Gracias por cualquier ayuda que alguien pueda dar.

+3

¿Realmente desea crear un nuevo * lenguaje de scripting *? ¿No puedes proporcionar una * interfaz * de scripting a tu motor de juego usando un idioma existente? – Thilo

+1

Sé que no es "C-based", pero el script Lua es un lenguaje bastante simple para aprender y escribir. – Zack

+0

@Thilo: Técnicamente, probablemente no sea necesario, pero pensé que sería algo que podría ser muy útil más adelante, para mantener la compatibilidad cruzada entre mi trabajo con Android y PC ... Pero si pudiera encontrar un lenguaje de scripting que no fuera demasiado doloroso de implementar tanto en mis editores de C++ como en mi motor de Android por ahora, supongo que examinaría eso. – Kalisme

Respuesta

4

He intentado buscar tutoriales en línea, pero mucho requiero convertir las cosas a código de bytes, máquinas virtuales y tal

Sí. Este es realmente el enfoque, incluso para un lenguaje muerto y simple. Ejecutar el código fuente directamente será mucho más complicado, la forma en que esto se hace es primero analizar el código fuente y digerirlo en código de bytes, luego hacer que una máquina virtual interprete el código de bytes.

Es posible que desee ver los idiomas existentes para conocer su diseño.

This tutorial de flipcode construye un lenguaje simple e incluye todo el código, por lo que podría ser útil.

También puede consultar el código fuente Lua.

4

Parte de mi trabajo es mantener un lenguaje de scripting de juegos patentado. No conozco ningún libro "de instrucciones" sobre el tema en su sentido estricto. Hay un interesante artículo de Bruce Wilcox sobre cómo escribir esos idiomas. No analiza los detalles de implementación, sino que va un poco al proceso de diseño.

http://www.gamasutra.com/view/feature/1570/reflections_on_building_three_.php

Escribir un lenguaje de script es como escribir cualquier idioma e involucra a todos los mismos principios y cuestiones de diseño. Debes pensar en qué conceptos debe girar tu lenguaje, necesitas definir una gramática, luego necesitas escribir un compilador o traductor y/o un intérprete. Lo que elija y los detalles de sus implementaciones dependen totalmente de usted, y no hay una o la mejor manera de lograr estas cosas.

Existen formas estándar de pensar cuando se trata de analizar sintaxis y definir gramáticas de lenguaje. Las expresiones regulares son tus amigos aquí. Afortunadamente, C++ 11 incluye la biblioteca <regex> (originalmente de boost).Puede ser útil buscar un libro sobre compiladores para que comiences conceptos importantes, si realmente quieres profundizar en el tema. Cuando estaba en la universidad tomando un curso de compiladores, este era mi libro de texto, el cual he conservado hasta el día de hoy, así que lo recomiendo.

http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886/ref=sr_1_2?ie=UTF8&qid=1326618572&sr=8-2

Escribir un idioma es un ejercicio maravilloso en la informática. Sin embargo, si esto es para un proyecto o producto real, como otros que ya han comentado, mi consejo profesional es: No lo hagas si no tienes que hacerlo. Esta es una gran inversión de tiempo potencial que está considerando, y tiene que preguntarse: ¿Qué beneficios obtendré de mi propio idioma que no puedo encontrar en los lenguajes existentes libres de uso como Lua y Python, y ¿esos beneficios valen la pena los meses de tiempo extra que llevará implementarlo?

Y no se olvide de las herramientas. Si está escribiendo un idioma que desea que otros utilicen, necesita mucha documentación y herramientas, herramientas y herramientas. Seguramente querrá un depurador de nivel de fuente al menos, ¡y escribir un buen depurador puede tomar tanto tiempo como escribir el lenguaje mismo!

Si todo lo que quiere es un lenguaje para la lógica del juego de prototipado rápido, entonces Lua es más que adecuado para sus necesidades, y viene con mucha documentación, literatura y herramientas existentes.

3

algunos artículos viejos son todavía buena lectura, si usted puede encontrarlos:

  • M. Abrash, D. Illowsky, "hágalo usted mismo Minilenguajes con mini-intérpretes", Diario del Dr. Dobb 14 (9) (septiembre de 1989) 52-72.
  • J. Bentley, "Programming pearls: little languages", Comunicaciones del ACM 29 (1986) 711-721.
  • D. Betz, "Idiomas incrustados", Byte 13 # 12 (noviembre de 1988) 409-416.
  • D. Betz, "Su propio lenguaje minúsculo orientado a objetos", Dr. Dobb's Journal 16 (9) (Sep 1991) 26-33.
  • N. Franks, "Agregar un idioma de extensión a su software", Dr. Dobb's Journal 16 (9) (Sep 1991) 34-43.
  • R. Valdés, "Pequeños idiomas, grandes preguntas", Dr. Dobb's Journal 16 (9) (Sep 1991) 16-25.

Véase también Bob: A Tiny Object-Oriented Language por Betz. Las últimas fuentes para BOB están disponibles en http://www.xlisp.org/.

Cuestiones relacionadas