我们知道在C Flex中有一个函数unput(int c),它可以将字符c放回输入流中,我想知道JFlex中是否有类似的函数。 谢谢!
如果我们从 flex 手册中查看unput
规范,我们可以注意到它的功能:
unput(c) 将字符 c 放回输入流中。这将是 扫描的下一个字符。以下操作将采取当前 标记,并使其重新扫描,括在括号中。
{ int i; /* Copy yytext because unput() trashes yytext */ char *yycopy = strdup( yytext ); unput( ')' ); for ( i = yyleng - 1; i >= 0; --i ) unput( yycopy[i] ); unput( '(' ); free( yycopy ); }
请注意,由于每个 unput() 将给定字符放回输入流的开头,因此必须回推字符串 从后到前。
根据JFlex手册,没有unput
,但有yypushback
:
•
void yypushback(int number)
将匹配文本的数字字符推回输入 流。它们将在下一次扫描调用中再次读取 方法。要再次读取的字符数不得更多 比匹配文本的长度。推回的字符将 不包括在
yylength()
和yytext()
中。请注意,在 Java 中 字符串是不可更改的,即像这样的操作代码String matched = yytext(); yypushback(1); return matched;
将返回整个匹配的文本,而
yypushback(1); return yytext();
将返回匹配的文本减去最后一个字符。
虽然它们不一样,但unput的许多用途可以通过使用yypushback
来实现;但是你不能将不同的字符放入输入流中,你可以使用unput
。请注意,flex 具有像 yypushback
一样操作的yyless
。