我们知道在C Flex中有一个函数unput(int c)可以将字符c放回输入流,我想知道JFlex中是否有类似的函数。 THX!
答案 0 :(得分:0)
如果我们从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 manual,没有unput
,但有yypushback
:
•
void yypushback(int number)
将匹配文本的数字字符推回输入 流。它们将在下次扫描调用时再次读取 方法。要再次读取的字符数不能更大 比匹配文本的长度。推回的角色会 不包含在
这样的动作代码yylength()
和yytext()
中。请注意,在Java中 字符串是不可更改的,即像String matched = yytext(); yypushback(1); return matched;
将返回整个匹配的文本,而
yypushback(1); return yytext();
将返回匹配的文字减去最后一个字符。
尽管它们不相同,但使用yypushback
可以实现许多使用输出的功能。但是您不能将不同的字符放入输入流中,您可以使用unput
。请注意,flex具有yyless
,其操作类似于yypushback
。