Я пытаюсь использовать flex и bison для создания фильтра, потому что хочу получить определенные грамматические элементы из сложного языка. Мой план состоит в том, чтобы использовать flex + bison для распознавания грамматики и сбрасывать местоположение элементов, представляющих интерес. (Затем используйте script для захвата текста в соответствии с местами, сброшенными.)
Я обнаружил, что flex может поддерживать функцию бизона, называемую bison-location, но как она работает точно. Я попробовал этот пример в гибком документе, кажется, что yylloc не устанавливается автоматически flex, я всегда получаю (1,0)-(1,0)
. Можно ли автоматически вычислить местоположение каждого токена? Если нет, какая функция интерфейса определена для меня? Есть ли какой-нибудь пример?
Любое лучшее решение относительно инструментов?
С наилучшими пожеланиями, Кевин
Edit:
Теперь интерфейс для yylex превратится в:
int yylex(YYSTYPE * yylval_param,YYLTYPE * yylloc_param );
Руководство bison не указывает, как lexer должен реализовать, чтобы правильно установить yylloc_param. Для меня трудно вручную отслеживать номер столбца каждого токена.