gpt4 book ai didi

c - flex bison C lex yacc 扫描字符串缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:09 24 4
gpt4 key购买 nike

有一些 C 代码,例如:

int doCommand(char* command)
{
// +2 on strlen is for the two extra '\0' characters
// needed by flex when scanning strings.
YY_BUFFER_STATE yybs = yy_scan_buffer(command, strlen(command)+2);
yy_switch_to_buffer(yybs);
yyparse();
yy_delete_buffer(yybs);
}

它在类似(伪代码)的循环中被调用:

read characters upto and including '\n' into a buffer;
add two '\0' characters;
call doCommand(buffer);
zero the buffer; // NOTE: same buffer will be used next loop.

问题在于,在成功处理第一个命令后,输入的任何其他命令都不会得到处理。

我已经打印出 yylineno(当 flex 扫描仪看到 '\n' 时它会增加)并且它只在第一个命令后增加一次。

我不知道是不是我在 flex 上做错了什么,或者是 yyparse 在第一次调用后停止调用扫描器。

如果有人能准确指出正在发生的事情,我将非常高兴。

最佳答案

你能调试一下吗?检查读取了哪些 token 。是否及时切换,输入是什么。

我不使用 flex 增强功能,因为我需要可移植性,所以我通过 YY_INPUT 以不同方式实现此机制。可能生成的标记与您期望的不同,所以我建议先调试 lex 部分。

关于c - flex bison C lex yacc 扫描字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4913388/

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