有点像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);
}
它在一个循环中调用,如(psuedocode):
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 (当灵活扫描程序看到'\ n'时会增加),并且在第一个命令之后只会增加一次。
如果我在使用flex时出错,或者如果 yyparse 在第一次使用后停止调用扫描仪,我就无法解决。
如果有人能指出究竟发生了什么,我会非常高兴。
答案 0 :(得分:2)
你能用调试试试吗?检查读取的令牌。它是否及时切换,输入是什么。
我不使用flex增强功能,因为我需要可移植性,所以我通过YY_INPUT实现这种机制有点不同。可能生成的令牌与您的预期不同,所以我建议先调试lex部分。