2014-02-17 2 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 

Вы в данный момент нет USERCODE, так что вы бы начать свой файл с %%, указывая, что файл начинается сразу же с Параметры и декларации. Таким образом, начало файла будет выглядеть так:

%% 
%class Lexer 

%line 
%column 
Смежные вопросы