我们知道在 C Flex 中有一个函数 unput(int c) 可以将字符 c 放回输入流中,我想知道 JFlex 中是否有类似的函数。谢谢!
1 回答
0
如果我们查看unput
flex 手册中的规范,我们可以注意到它的功能:
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
. 请注意, flexyyless
的操作类似于yypushback
.
于 2015-02-17T20:01:47.577 回答