flex / bison возвращает символьный токен из сканера в C ++ - PullRequest
0 голосов
/ 20 марта 2019

Я использую пример calc ++, найденный в документации по бизонам, как отправную точку для более сложной грамматики.Одна вещь, которую я не смог выяснить, это как вернуть символьный (буквальный) токен из flex в bison.

В примерах на чистом C я видел, как flex просто возвращал токен как:

"+"         { count(); return('+'); }

В примере calc ++ просто используются символы токенов:

"+"        return yy::parser::make_PLUS   (loc);

Но это заставляет меня использовать PLUS вместо '+' в файле грамматики.

Как я могуget flex для возврата литерального значения, как в примере C при генерации кода C ++?

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Не определяйте это вообще.Он вернется как литерал, и вы сможете использовать его в парсере как '+'

0 голосов
/ 21 марта 2019

Если вы используете «полные символы» (то есть %define api.token.constructor), вы должны иметь возможность использовать соответствующий конструктор parser::symbol_type, как показано в разделе руководства для бизонов «Полные символы» :

":"      return yy::parser::symbol_type (':', loc);
...