2014-10-23 5 views
1

jflex를 공부하기 시작했습니다. 나는 다음과 같은 코드를 jflex 사용하여 출력을 생성 할 때 나는 오류를Jflex 예기치 않은 문자 오류

letter [a-zA-Z] 
digit [0-9] 
intlit  [0-9]+ 
%{ 
#include <stdio.h> 
# define BASTYPTOK 257 /*following are output from yacc*/ 
# define IDTOK 258  /*yacc assigns token numbers */ 
# define LITTOK 259 
# define CINTOK 260 
# define INSTREAMTOK 261 
# define COUTTOK 262 
# define OUTSTREAMTOK 263 
# define WHILETOK 264 
# define IFTOK 265 
# define ADDOPTOK 266 
# define MULOPTOK 267 
# define RELOPTOK 268 
# define NOTTOK 269 
# define STRLITTOK 270 

main() /*this replaces the main in the lex library*\ 
{ int p; 
    while (p= yylex()) 
       printf("%d is \"%s\"\n", p, yytext); 
       /*yytext is where lex stores the lexeme*/} 
%} 

%% 
[ \t\n]+    ; 
"//".*"\n"    ; 
{intlit}    {return(LITTOK);} 
cin      {return(CINTOK);} 
"<<"     {return(INSTREAMTOK);} 
\<|"=="     {return(RELOPTOK);} 
\+|\-|"||"    {return(ADDOPTOK);} 
"="      {return(yytext[0]);} 
"("      {return(yytext[0]);} 
")"      {return(yytext[0]);} 
.      {return (yytext[0]); /*default action*/} 

%% 

누군가가 나에게 문제를 일으키는 무엇을 알아내는 데 도움 주실 래요 실행하려고

Error in file "\abc.flex" (line 29): 
Unexpected character 

[ \t\n]+    ; 
^ 
1 error, 0 warnings. 

Generation aborted. 

코드가 계속. 패턴도 제대로 들여 쓰여지지 않습니다. 도움을 주신 덕분에

답변

1

유효한 flex 입력이지만 올바르지 않습니다. jflex입니다. 포함 된 코드가 C보다는 Java에 있기 때문에 당신이 jflex를 사용하려는 이유, 그것은 나에게 분명하지 않다, 그러나 당신의 의도가 포트에있는 경우 Java 스캐너 당신은 특히 JFlex manual section on porting.

을 읽어보십시오의 JFlex 입력의 섹션 flex에서 매우 다르다 :

 flex         JFlex 

definitions and declarations   user code 
%%          %% 
rules         declarations 
%%          %% 
user code        definitions and rules 

그래서 당신의 정의와 규칙은 아니지만 JFlex 파일를 들어, flex 파일에 대한 올바른 섹션에 있습니다. (이것은 JFlex 유효한 사용자 코드를 예상 플렉스 선언 바꾸어 인한 다양한 구문 오류를 인식하지 못하기 때문에 출력 JFlex 단지 복사 첫번째 섹션.)

또한 JFlex 정의 형태 name = pattern의 아르보다는 name pattern , 일단 정렬 된 파일의 순서를 얻으면 등호를 추가해야합니다. 과. 물론 C 코드를 Java에 다시 작성하십시오.