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