我正在使用bison文档中的calc ++示例作为更复杂语法的起点。我无法弄清楚的一件事是如何将字符(文字)令牌从flex返回到bison。
在纯C示例中,我看到flex只是将令牌返回为:
"+" { count(); return('+'); }
calc ++示例只使用标记符号:
"+" return yy::parser::make_PLUS (loc);
但这迫使我在语法文件中使用PLUS而不是'+'。
在生成C ++代码时,如何使用flex来返回C语言中的文字值?
根本不要定义它。它将作为文字返回,您将能够在解析器中将其用作“+”
如果你使用“完整符号”(即%define api.token.constructor
),你应该能够使用适当的parser::symbol_type
构造函数,如bison manual section on "complete symbols"所示:
":" return yy::parser::symbol_type (':', loc);