我想使用yy_scan_bytes(),因为我有定义规则的空字符。我的问题是我的字符串可以匹配多个规则。我想要掌握所有匹配的规则。我想一次性提供yylex()函数一个字符,并检查是否匹配。我尝试了下面的代码进行测试,但这不起作用。带有多个缓冲区的lex flex扫描程序
for(int i=0;i<length;i++)
{
yy_scan_bytes(&temp[i],1);
index=TomsonTalkslex();
}
为了简单起见,我只是返回从扫描仪匹配规则的索引。 temp是一个char缓冲区。我尝试使用yy_switch_to_buffer(yy_scan_bytes(& temp [i],1));但这没有奏效。
如何告诉扫描程序不要重置其状态并继续处理具有相同状态的后续缓冲区。
为什么你需要使用扫描字节?默认情况下,yylex每次读取一个字符直到EOF,所以空字节应该正常读取。另外,您是否希望保存当前缓冲区状态,以便以后使用此缓冲区,或者在切换缓冲区时使用新缓冲区的*最后一个缓冲区状态保持状态*? –
我在运行时输入了数据,所以我需要使用扫描字节。我也想为每个字符调用yylex,我不想让它重置状态机,这就是为什么我想保存缓冲区状态。我想用新的缓冲区使用我的最后缓冲区状态。例如,我有2个规则,一个用于匹配ab和另一个用于游行cd。如果我输入“abcd”来扫描字节,它将只返回一个我认为是cd的匹配。我想要规则,ab处理时需要ab规则,cd处理时cd,这只能通过扫描字节完成。 – Saba