flex / bison在C ++中从扫描程序返回一个字符标记

问题描述 投票:-1回答:2

我正在使用bison文档中的calc ++示例作为更复杂语法的起点。我无法弄清楚的一件事是如何将字符(文字)令牌从flex返回到bison。

在纯C示例中,我看到flex只是将令牌返回为:

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

calc ++示例只使用标记符号:

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

但这迫使我在语法文件中使用PLUS而不是'+'。

在生成C ++代码时,如何使用flex来返回C语言中的文字值?

c++ bison flex-lexer
2个回答
1
投票

根本不要定义它。它将作为文字返回,您将能够在解析器中将其用作“+”


0
投票

如果你使用“完整符号”(即%define api.token.constructor),你应该能够使用适当的parser::symbol_type构造函数,如bison manual section on "complete symbols"所示:

":"      return yy::parser::symbol_type (':', loc);
© www.soinside.com 2019 - 2024. All rights reserved.