2016-11-21 3 views
-1
EOL \n 
    WS(" "|\t|\n) 
    WSS {WS}* 
    NEWSS {WSS}+ 
    NAME [a-zA-z_][a-zA-z0-9_-]* 
    WORD [^;]+ 
    IMPORT {NEWSS}'{NAME}'{WSS}; 
    VAL [a-zA-z0-9]+ 
    CONTENT [^}]+ 
    MIX {NEWSS}{NAME}{WSS}[(] 
    INCLUDE {WSS}{NAME}{WSS}[{] 

    %s DOTAIM 
    %s NAMESTATE 
    %s NAMER 
    %s CONTENT 
    %s VALUE 
    %s INC 

    %% 
    ${NAME} {key=yytext;BEGIN(NAMESTATE);} 
    . {output+=yytext;} 
    \n {output+=yytext;} 
    45) <NAMESTATE>; {if(var.find(key)==var.end()){output="Unknown variable";return 1;};output+=(var[key]+yytext);BEGIN(INITIAL);} 
    <NAMESTATE>{WSS}:{WSS} {BEGIN(DOTAIM);} 
    <DOTAIM>{WORD}{WSS} {val=trim(yytext); var[key]=val;} 
    48) <DOTAIM>; {BEGIN(INITIAL);} 

이 내 코드와 나는이 경고 점점 계속 :F (렉스) 경고는 규칙을 일치시킬 수없는

hello.lex : 45 : 경고, 규칙이 일치시킬 수없는
hello.lex을 : 48 : 경고, 규칙을 일치시킬 수 없음

이유를 아는 사람이 있습니까? 이것들은 주에 있고 43 행은 그 (것)들이 일치하는 것을 막지 못하기 때문입니다. ". 기동 조건은 다음 전혀 시작 조건 규칙도 활성화됩니다 (포함) 인 경우"를 manual가 나타냅니다 같이

답변

0

당신은 포함 (%s)로 시작 조건을 선언

그래서 43 행의 .이 활성화되어 ;이 일치하지 않습니다.

규칙의 끝으로 대체 규칙을 이동하면 문제가 해결되며 일반적으로 시작 조건이있는 경우에도 가장 적합한 스타일입니다.