Flex函数输入(进入char),在JFlex中具有相同的功能

时间:2015-01-11 02:42:24

标签: flex-lexer jflex

我们知道在C Flex中有一个函数unput(int c)可以将字符c放回输入流,我想知道JFlex中是否有类似的函数。 THX!

1 个答案:

答案 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