2017-11-15 22 views
0

플렉스를 사용하면 플렉스를 사용합니다. 앞에 무언가가있을 때 어떻게 일치합니까?Flex-lex : 앞에 r이 있으면 r을 찾습니다.

예를 들어 : D 인쇄 뭔가

전에 R이 있다면 나는

{something}/D {printf("V");}

을 시도했지만 작동하지 않습니다.

답변

0

그건 어떻게 (f) 렉스가 작동하지 않습니다. (F) lex는 토큰 화자입니다. 입력을 연속적인 토큰으로 나눕니다. 입력의 각 지점에서 정확하게 해당 지점에서 시작하는 적절한 토큰을 선택합니다. 다음 토큰은 이전 토큰의 끝에서 시작됩니다.

일부 특정 컨텍스트에서만 특정 토큰을 인식하려는 경우 start conditions을 사용할 수 있지만 컨텍스트 변경 사항을 확인하는 것은 사용자의 책임입니다. 그래서 당신은, 예를 들어,로 끝나는 토큰과 관련된 행동에 다른 시작 상태로 변경할 수있는 R :

%x AFTER_R 
%% 
[[:alpha:]]+ { if (yytext[yyleng-1] == 'R') BEGIN(AFTER_R); 
       /* handle this token */ 
       } 
    /* Etc. for other patterns which might end with an R */ 
<AFTER_R>"D" { puts("Found a D after an R"); } 
어휘 설명을 할 수 있습니다 시작 조건의

과도한 사용 읽고 디버깅하기 어려운 파일 ; 귀하의 문제가 lex 토큰 화 모델에 적합하지 않음을 나타낼 수 있습니다.