2013-02-05 3 views
0

TeX에서 방정식은 $...$ 사이에 정의됩니다. 의 인스턴스에 대해 lex에 대한 렉서 규칙을 어떻게 정의 할 수 있습니까? 사이의 문자는 몇 개입니까? TeX 방정식의 Lexer 규칙 (정규 표현식)

내가 시도 :

equation \$[^\$]*\$ 

을 성공없이.

답변

1

당신은 달러 기호가 방정식의 한 부분으로 포함하지 않으려면 start conditions를 사용하여 시도 할 수 있습니다 : 당신이 다른 상태를 가질 경우 yy_push_state()yy_pop_state()을 사용할 수 있습니다

%x EQN 
%% 
\$ { BEGIN(EQN); } /* switch to EQN start condition upon seeing $ */ 
<EQN>{ 
    \$ { BEGIN(INITIAL); } /* return to initial state upon seeing another $ */ 
    [^\$]* { printf(yytext); } /* match everything that isn't a $ */ 
}   

을 다른 방법으로 대신 BEGIN(STATE)를 사용하여 귀하의 렉서에 정의되어 있습니다.

+0

위와 같이''$''과''$$''을 구별하기 위해 사용할 수도 있습니다 – hosolmaz