Я пытаюсь создать простой интерпретируемый язык для изучения целей. Я прочитал бесчисленную теорию и учебные руководства на ANTLR и JavaCC, но я не могу выяснить, как на самом деле заставить его сделать что-то полезное.
Я учусь лучше всего путем "демонтажа чего-то и откладывания его вместе снова", таким образом, там какие-либо рабочие примеры простых языков, реализованных с помощью инструментов, таких как ANTLR или подобный?
Что-то как следующее могло бы быть хорошим:
x = 1
if x == 1
print "true"
[бессовестная вилка] Почему бы не купить мою книгу Шаблоны реализации языка ? У меня есть все необходимое для создания языка, включая несколько интерпретаторов и т. Д.
Почему бы вам не определить грамматику для действительно простого языка, который соответствует вашему примеру, и не попытаться реализовать ее? Используйте ANTLR для создания дерева синтаксического анализа, а затем выясните, как «оценить» дерево. Для начала не беспокойтесь об объявлениях или типах данных (каждое значение является целым числом) и поддерживайте 3 типа операторов: присваивание, оператор if и print
.
Вероятно, вы можете найти множество небольших языков в Google Code и Github.
Вот игрушечный язык, который я создал в ANTLR как проект класса несколько лет назад: http://code.google.com/p/bcis/
Серия видеоуроков Скотта «JavaDude» Стэнчфилда по ANTLR3 довольно хороша.
И, конечно же, есть StackOverflow, в котором есть тонны содержимого ANTLR. Например:
Примечание: вы можете использовать другой подход и проверить XText для генерации всего кода для вас.
Из документации XText:
В отличие от обычных генераторов синтаксического анализатора (например, JavaCC или ANTLR), Xtext выводит из входной грамматики гораздо больше, чем просто синтаксический анализатор и лексический анализатор (лексический анализатор). Язык грамматики используется для описания и генерации:
После того, как все части сгенерированы, вы можете анализировать их (и тестировать) по своему усмотрению.