Coco/R - это генератор компилятора, который принимает приписанную грамматику исходного языка и генерирует сканер и анализатор для этого языка. Сканер работает в качестве детерминированного конечного автомата. Сигнал использует рекурсивный спуск. LL (1) конфликты могут быть разрешены с помощью многомолетского Lookahead или семантических проверок. Таким образом, класс принятой грамматики составляет ll (k) для произвольного k.
Я долго использую версию Coco / R Turbo Pascal. Иногда необходимо было изменить код. Если источники изменились, я перекомпилировал его. Но после некоторого обновления Windows я обнаружил, что Turbo Pascal идет в лучшее место и перестал работать. В общем, я думаю, что многие люди из Никлауса Эмиля Вирт вызывают неприязнь.
В целом, я считаю, что есть мало таких людей, которые внесли сопоставимый вклад в разработку программирования и языков информатики.
Легко найти сложное и часто непостижимое решение проблемы. Трудно сделать простое, чистое и понятное решение.
Когда вы видите такое решение, становится ясно, что это работа Великого Магистра с заглавным письмом. Сначала я перенес код из Turbo Pascal. Но я обнаружил, что за почти 20 лет под мостом протекала большая часть воды, и код Coco/R также хорошо улучшился.
Последняя версия, которую я нашел, была C ++, C #, Java. Затем я решил перенести код и выбрал C #. По духу, это язык, ближайший к Дельфи, вероятно, из -за того, что у них есть один главный архитектор.
Вы можете увидеть пример использования в проекте Protobuf-Delphi.
Предполагается, что он будет использовать один и тот же набор кадров для сканера и анализатора для разных языков. Компилятор опирается на довольно фиксированную структуру кадра для сканера и анализатора. Нежелательно изменить порядок разделов, так как это может привести к ошибкам компиляции в сгенерированном коде.
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
Пространство имен используется при генерации имени модуля. Теперь это используется в кадрах сканера и анализатора.
MACROS
prefix = "cr" .