Вам нужно будет расширить эту грамматику, прежде чем вы закончите, но ...
- Да, вы замените операторы
printf()
соответствующими return
утверждениями - (Или, что более вероятно / лучше, сохраните операторы печати и добавьте операторы возврата).
- Вы заключите действия в скобки '
{ ... }
'. - Вам нужно будет подумать, каксобираемся передать тип токена и значение токена обратно в ваш анализатор.
Стандартный способ - вернуть тип токена из yylex()
- функции, сгенерированной Flex.Существует глобальная переменная ylval
, которая может использоваться для передачи значения токена.Вы можете контролировать его тип.Обратите внимание, что где-то по пути вам нужно будет указать номера токенов (типы токенов).Это может быть перечисление или серия #defines
.Классически информация предоставляется лексическому анализатору парсером.То есть Yacc предоставляет список номеров токенов, которые он ожидает использовать, и Flex использует эти номера (или, точнее, вы используете эти числа в операторах возврата в коде, сгенерированном Flex).
Чтобы получить токены от лексера к вашему парсеру, вам нужно позвонить yylex()
;вы обычно компилируете это отдельно от вашего парсера, хотя, возможно, вы могли бы включить его сгенерированный источник в свой файл парсера, если вы действительно этого хотите.