Flex function unput(int cahr),在JFlex中是相同的函数



我们知道在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

最新更新