1
即使世界一點點的C代碼是這樣的:柔性野牛Ç的lex yacc的掃描字符串緩衝區
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停止調用掃描儀後第一次去。
如果有人能夠確切地指出發生了什麼,我會很高興。
你好,再次感謝您的回覆,並提示使用yydebug。事實證明,這與flex或yyparse無關,它是我在循環中的字符串重置函數。它將index-where-next-character-重置爲0,但由於我的字符串添加字符的工作方式,它需要重置爲-1 ......所以我傳遞的字符串以'\ 0'掃描儀,它顯然沒有工作。 – 2011-02-06 16:26:18