flex / bison从C ++中的扫描仪返回字符令牌

时间:2019-03-20 19:40:35

标签: c++ bison flex-lexer

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

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

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

calc ++示例仅使用令牌符号:

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

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

在生成C ++代码时,如何像C示例中那样让flex返回文字值?

2 个答案:

答案 0 :(得分:1)

根本不定义它。它会以原义形式返回,您将能够在解析器中将其用作“ +”

答案 1 :(得分:0)

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

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