2014-02-17 44 views
0

我試圖使用JFlex的有以下輸入文件:JFlex的錯誤:意外字符:YYINITIAL

%class Lexer 

%line 
%column 

%init{ 
yybegin(YYINITIAL); 
%init} 

%{ 
     Copied directly to Java file. 
%} 

delim  = \r|\n|\r\n 
not_newline = . 
whitespace = {delim} | [ \t\n\r] 
any  = {not_newline} | {delim} | {quote} 
upp_letter = [A-Z] 
low_letter = [a-z] 
digit  = [0-9] 
quote  = [\」] 
backslash = [\\] 
escape  = {backslash}{any} 
LPAR  = [(] 
RPAR  = [)] 
COMMA  = [,] 
letter  = {upp_letter} | {low_letter} 
ID  = {letter}({letter}|{digit})* 
INT  = {digit}+ 
STRING  = {quote}({letter} | {digit} | {escape})*{quote} 


%% 

<YYINITIAL> { 

    {ID}  { return ID } 
    {INT}  { return INT } 
    {LPAR}  { return symbol(sym.LPAR); } 
    {RPAR}  { return symbol(sym.RPAR); } 
    {COMMA}  { return symbol(sum.COMMA); } 
    {STRING} { return STRING } 

    {whitespace} {} 

} 

[^]   { throw new Error(「Illegal character <「+yytext()+」>」); } 

(這不是100%完成呢,我只是想看看我是否有任何錯誤)

無論如何,當我嘗試使用JFLEX它給我以下錯誤:

Reading "lexer2.flex" 

Error in file "lexer2.flex" (line 35): 
Unexpected character 
<YYINITIAL> { 
^ 
1 error, 0 warnings. 

我還以爲是在掃描器開始,它總是被默認聲明?我錯過了什麼嗎?

謝謝你的幫助。

回答

1

您的.flex文件格式錯誤。正如JFlex manual定義,你要組織這樣的文件:

UserCode 
%% 
Options and declarations 
%% 
Lexical rules 

您目前沒有用戶代碼,所以你會開始用%%您的文件,表明該文件啓動了蝙蝠與選項和聲明。所以文件的開頭看起來像這樣:

%% 
%class Lexer 

%line 
%column