Допустим, я хочу, чтобы разобрать мой новый язык, который выглядит следующим образом:Динамический анализатор - читать лексемы из отдельного файла
main.mylang
import "tags.mylang"
cat dog bacon
И есть еще один файл tags.mylang
, который выглядит как это:
cat "meow"
dog "woof"
bacon "sizzle"
Запуск main.mylang
будет выводить
meow woof sizzle
Проблема, с которой я сталкиваюсь, заключается в том, что «кошка», «собака» и «бекон» определены в отдельном файле, как реализовано моим разработчиком mylang
; т. е. я не могу заранее сделать их частью грамматики.
Возможно ли динамическое добавление этих тегов в грамматику по мере ее разбора? Я не хочу добавлять подстановочный код \w+
или что-то, потому что я хочу, чтобы это ошибка на непризнанных тегах.
Редактировать: Я пишу это с использованием jison
, который основан на bison
.
Как вы знаете, что тег непризнан, если это может быть переменная? Является ли ваша грамматика такой, что теги и переменные никогда не встречаются в одном контексте? Или теги считаются зарезервированными словами, хотя они могут время от времени меняться? – rici
@rici: Тэги будут козырем переменных. Если для токена указан тег, то этот токен будет обрабатываться как тег, даже если есть также переменная с тем же именем. Похоже на то, как вы можете определить как функции, так и переменные с тем же именем на многих других языках. Однако я начинаю думать, что это плохая идея. Я мог бы просто предварять переменные с помощью '' 'как PHP или что-то в этом роде ... – mpen
Я склонен согласиться с тем, что пропускать теги в имена переменных trump - отличная идея. Проблема в том, что «файлы тегов» не являются составными; поскольку вы должны знать, какие имена переменных не могут использоваться для написания «программы», вы не можете просто добавить новый файл тега в существующую программу. Кроме того, это затрудняет синтаксический цвет. С другой стороны, '' 'sigils уродливые. В любом случае, удачи. – rici