gpt4 book ai didi

c++ - YACC/LEX yyparse() 循环问题

转载 作者:行者123 更新时间:2023-11-28 06:16:29 27 4
gpt4 key购买 nike

我试图在循环中解析输入,直到用户输入“退出”。但是,当我通过参数传递查询时,yyparse() 有效,但当我在循环中执行相同的过程时,它显示错误。

我已经检查了“cmd”,它显示了准确输入的用户查询。

int main(int argc, char* argv[]) {
string cmd;
string terminate = ".q";
do
{
cout << endl << "Enter Query>";
std::getline(std::cin, cmd);
int parse = -1;
if (yyparse() == 0) {
cout << "OK!" << endl;
parse = 0;
}
else {
cout << "Error!" << endl;
parse = -1;
//continue;
}
} while (cmd != terminate);

最佳答案

这主要是一个 lex 问题,而不是 yacc 问题。

默认情况下,lex 词法分析器将从 stdin 读取,直到到达 EOF。一旦到达 EOF,就大功告成了——所有进一步从标准输入读取和调用 yylex 都会返回 EOF。

如果你想从其他地方(比如字符串)读取,你需要做一些其他的事情。 Flex 提供 yy_scan_string 来读取字符串,如果您使用它,yylex 会在您到达字符串末尾时调用返回 EOF,此时您可以调用 yy_scan_string 再次读取另一个字符串。所以像这样:

do
{
cout << endl << "Enter Query>";
std::getline(std::cin, cmd);
YY_BUFFER_STATE buf = yy_scan_string(cmd.c_str());
int parse = -1;
if (yyparse() == 0) {...

yy_delete_buffer(buf);

关于c++ - YACC/LEX yyparse() 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198761/

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