Я пытаюсь выучить Flex & Bison. Я прочитал материал и понимаю, как он работает на теоретическом уровне. Тем не менее, я не могу реализовать даже самые базовые вещи, не задев ментальный блок. (Примечание: я не посещал курсы по компиляции или что-то в этом роде ... это мое первое знакомство с любым из этих вещей). Я думаю, что когда я увижу эту сверхосновную вещь, реализованную, я смогу двигаться дальше и понимать ее гораздо легче.
По сути, все, что я пытаюсь сделать, это написать программу, которая, увидев type my_type /// some text
, вызовет функцию my_type с именем "set_text" и установит для текста то, что следует после этого комментария. Скорее моя грамматика Bison будет вызывать функцию my_type.set_text(some text);
Я понимаю, что мог бы сделать это легко, не используя Flex и Bison, но дело в том, чтобы научиться.
У меня уже есть правильно настроенные файлы ... все, что мне нужно реализовать, - это передача токена (из Flex) и действие, предпринятое (из Bison).
Мой токен Flex прошел до сих пор:
"\/"{3} { return COMMENT; }
Мой токен Зубра схватил до сих пор
%token COMMENT
и это все, что я могу придумать. Я знаю, что еще мне нужно ... Я просто не могу понять, как это сделать. Я знаю, что мне нужно:
а) передать type и my_type как что-то
б) придумать «правило» в Bison для обработки этого материала и вызова функции правильной функции
Любая помощь? Я уже ухожу?
ОБНОВЛЕНИЕ (дальнейшие мысли о том, как это сделать):
Может быть, мой файл Bison должен содержать правило типа
commented_variable: {($2).set_text($4);}
IDENTIFIER NAME COMMENT COMMENT_TEXT
Таким образом, мой файл Flex должен передать ему эти токены? Я на правильном пути?