我想"String"
从该行中选择单词"String helloString String Stringhello helloStringhello"
。
这里应该选2个字“
String
”(第一个 和中间)不应选择“
String
”中的“helloString
”或“Stringhello
”或“ ”。helloStringhello
这是我的回复:
<YYINITIAL> (String) {return new Token(TokenType.String,yytext());}
但它选择任何单词“字符串”。
我的 Jlex 代码:
import java.io.*;
enum TokenType {Type_String,Identifier}
class Token{
String text;
TokenType type;
Token(TokenType type,String text)
{
this.text=text;
this.type=type;
}
public String toString()
{
return String.format("[%s,%s]",type,text);
}
}
%%
%class Lexer
%public
%function getNextToken
%type Token
%{
public static void main(String[] args) throws IOException {
FileReader r = new FileReader("in.txt");
Lexer l = new Lexer(r);
Token tok;
while((tok=l.getNextToken())!=null){
System.out.println(tok);
}
r.close();
}
%}
%line
%char
SPACE=[\r\t\n\f\ ]
ALPHA=[a-zA-Z]
DIGIT=[0-9]
ID=({ALPHA}|_)({ALPHA}|{DIGIT}|_)*
%%
<YYINITIAL> {ID} {return new Token(TokenType.Identifier,yytext());}
<YYINITIAL> (String) {return new Token(TokenType.Type_String,yytext());}
<YYINITIAL> {SPACE}* {}
<YYINITIAL> . {System.out.println("error - "+yytext());}