gpt4 book ai didi

c++ - 处理位置信息bison c++解析器报错

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:12 25 4
gpt4 key购买 nike

我正在研究 bison c++ 解析器。大多数示例在 .y 文件中都有带有参数 location& 的错误方法,但我不确定如何获取 location_type 来调用此方法。

typedef location location_type;
void
yy::c_parser::error (const location_type& l,
const std::string& m)
{
driver.error (l, m);
}

这是来自 http://panthema.net/2007/flex-bison-cpp-example/ 的示例摘录,

if (!driver.calc.existsVariable(*$1)) {
error(yyloc, std::string("Unknown variable \"") + *$1 + "\"");

但是,我在编译时得到了一个错误,parser.yy:109: error: ‘yyloc’ was not declared in this scope

最佳答案

你的问题有点不清楚:你想从哪里调用yyerror

如果你想从解析器调用它,那么只需使用 @n 伪变量:

exp: exp "/" exp
{
if (!$3)
{
yyerror(@3, "division by zero");
YYERROR;
}
else
{
$$ = $1 / $3;
}
}

如果你想从扫描仪调用它,然后使用那里使用的变量来表示当前位置,可能类似于 yylloc

如果你想从别处调用它(例如,从 AST 遍历,但这会很奇怪),然后找到那里的位置。

但更重要的是(抱歉,我可能会说一些您已经知道的事情):请注意您通常不需要调用 yyerror:您必须提供它,以便解析器可以引发错误。对 yyerror 的典型调用是在生成的代码中,而不是在您期望编写的代码中。

关于c++ - 处理位置信息bison c++解析器报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com