Использование парсера Lemon с пользовательскими значениями токенов

Я переношу старую грамматику на лимон, и у меня есть все терминальные символы, уже определенные в заголовочном файле; Я хотел бы использовать их с этими значениями вместо тех, которые были сгенерированы лимоном в parser.h: возможно ли это?
Перезапись parser.h совершенно бесполезна, потому что это просто зеркало того, что происходит внутри, совпадающие значения останутся теми же.
(Поскольку у лимона много общего с Bison, я думаю, что решение для бизон решил бы проблему и в лимоне тоже)


person skarux    schedule 31.03.2015    source источник


Ответы (1)


С помощью bison вы можете вручную присваивать значения токенам, объявляя их в директиве %token (например, %token TOK 263). Однако эта опция недоступна в лимоне (насколько я знаю).

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

Я бы рекомендовал просто позволить генератору парсера сгенерировать заголовочный файл, а затем использовать его вместо определений в существующем заголовочном файле. Единственная стоимость (afaics) заключается в том, что вам нужно перекомпилировать любые части проекта, которые ссылаются на значения токенов, которые обычно ограничиваются лексером.

person rici    schedule 31.03.2015