учебные пособия или введение в написание простого языка сценариев? - PullRequest
11 голосов
/ 15 января 2012

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

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 15 января 2012

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

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

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

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

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

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

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

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

4 голосов
/ 15 января 2012

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

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

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

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

Вы также можете взглянуть на исходный код Lua .

3 голосов
/ 17 января 2012

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

  • M.Abrash, D. Illowsky, "Сверните свои собственные мини-языки с мини-переводчиками", Dr. Dobb's Journal 14 (9) (сентябрь 1989) 52–72.
  • J.Бентли, «Программирование жемчужин: маленькие языки», Сообщения ACM 29 (1986) 711–721.
  • D.Betz, "Embedded languages", Байт 13 # 12 (ноябрь 1988) 409–416.
  • D.Бетц, «Ваш собственный крошечный объектно-ориентированный язык», Dr. Dobb's Journal 16 (9) (сентябрь 1991) 26–33.
  • N.Фрэнкс, «Добавление языка расширения к вашему программному обеспечению», Dr. Dobb's Journal 16 (9) (сентябрь 1991) 34–43.
  • R.Вальдес, «Маленькие языки, большие вопросы», Журнал доктора Добба 16 (9) (сентябрь 1991) 16–25.

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

...