Учебники или введение для написания простого языка сценариев?

Я знаю, что здесь есть несколько вопросов, связанных с этим вопросом, но было трудно найти что-нибудь полезное для того, что мне нужно...

Я также знаю, что это, вероятно, в конечном итоге будет задачей, но я действительно хочу сделать простой язык сценариев для игровых движков... Я хочу использовать его в С++ и моих игровых движках Android Java... но я не знаю, с чего начать... Я пробовал искать учебники в Интернете, но также требует преобразования вещей в байт-код, виртуальные машины и т.д.

Я просто хочу создать простой язык сценариев, который можно прочитать из движка, иметь простую логику "if/else"... простые функции, которые можно вызывать из других скриптов и т.д. Может быть, даже проще для ранних версий... Я действительно не знаю, с чего начать, но я знаю, что это то, что мне нужно, чтобы начать изучать и понимать.

Если кто-то может указать мне в правильном направлении и указать некоторые ссылки на очень простой "простой язык сценариев для игр", или даже указать некоторые ключевые понятия, которые я должен изучить... Я бы будьте очень благодарны.

Я бы предпочел минималистичный язык сценариев на языке C, но, я думаю, в него войдет специфика, как только я узнаю об этом больше.

Спасибо за любую помощь, которую любой может дать.

Ответ 1

Я пробовал искать обучающие материалы в Интернете, но многие требуют конвертировать вещи в байтовый код, виртуальные машины и т.д.

Да. Это действительно подход, даже для мертвого простого языка. Выполнение исходного кода напрямую будет более сложным, так как это делается, сначала вы анализируете исходный код и перевариваете его в байтовый код, а затем виртуальную машину интерпретируете байт-код.

Вы можете посмотреть существующие языки, чтобы узнать их дизайн.

Этот учебник из флипкода создает простой язык и включает весь код, поэтому он может быть полезен.

Вы также можете посмотреть исходный код Lua.

Ответ 2

Часть моей работы заключается в сохранении собственного языка сценариев игры. Я не знаю ни о каких "практических" книгах по этому предмету в его узком смысле. Есть интересная статья Брюса Уилкокса о написании таких языков. Он не обсуждает детали реализации, но немного переходит в процесс проектирования.

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

Написание скриптового языка - это как написание любого языка и включает в себя все те же принципы и вопросы дизайна. Вам нужно подумать о том, какие понятия должен изменить ваш язык, вам нужно определить грамматику, тогда вам нужно написать компилятор, переводчик и/или интерпретатор. Что вы выбираете, и детали их реализации полностью зависят от вас, и нет ни одного, ни лучшего способа выполнить эти вещи.

Существуют стандартные способы мышления, когда дело доходит до синтаксиса синтаксического анализа и определения языковых грамматик. Регулярные выражения - ваш друг здесь. К счастью, С++ 11 включает библиотеку <regex> (первоначально из boost). Это может помочь собрать книгу о компиляторах, чтобы вы начали с важных концепций, если вы действительно хотите углубиться в предмет. Когда я учился в университете на курсах компиляторов, это был мой учебник, который я сохранил со мной по сей день, поэтому рекомендую его.

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

Написание языка - замечательное упражнение в информатике. Однако, если это для реального проекта или продукта, то, как и другие, которые уже прокомментировали, мой профессиональный совет: не делайте этого, если вам действительно не нужно. Это огромная потенциальная инвестиция времени, которую вы рассматриваете, и вы сами задаетесь вопросом: какие преимущества я получу на своем родном языке, которого я не могу найти на существующих свободных языках, таких как Lua и Python, и это те преимущества, которые стоят месяцы дополнительного времени, которые он собирается предпринять для реализации?

И не забудьте инструменты. Если вы пишете язык, который вы собираетесь использовать другими, вам нужно много документации и инструментов, инструментов, инструментов. Вы почти наверняка захотите отладчика исходного уровня, по крайней мере, и писать хороший отладчик может занять столько же времени, сколько и сам язык!

Если все, что вам нужно, это язык для быстрой прототипирования игровой логики, то Lua, скорее всего, более чем подходит для ваших нужд и поставляется с большим количеством имеющейся документации, литературы и инструментов.

Ответ 3

Несколько старых статей по-прежнему хорошо читаются, если вы можете найти их:

  • M. Абраш, Д. Илловский, "Сверните свои мини-языки с помощью мини-переводчиков", Dr. Dobb Journal 14 (9) (сентябрь 1989 г.) 52-72.
  • J. Bentley, "Программирование жемчуга: маленькие языки", Сообщения ACM 29 (1986) 711-721.
  • D. Betz, "Встроенные языки", Byte 13 # 12 (ноябрь 1988 г.) 409-416.
  • D. Betz, "Ваш собственный крошечный объектно-ориентированный язык", Dr. Dobb Journal 16 (9) (сентябрь 1991) 26-33.
  • Н. Франки, "Добавление языка расширения к вашему программному обеспечению", Dr. Dobb Journal 16 (9) (сентябрь 1991 г.) 34-43.
  • R. Вальдес, "Маленькие языки, большие вопросы", Dr. Dobb Journal 16 (9) (сентябрь 1991) 16-25.

См. также Боб: маленький объектно-ориентированный язык от Betz. Последние источники для BOB доступны по адресу http://www.xlisp.org/.