1

lex では、 の間に定義された方程式の次の開始条件を定義できます$...$

%x EQN1

\$ { BEGIN(EQN1); }
<EQN1>{
    \$ { BEGIN(INITIAL); }
    [^\$]* {} 
}

の間の方程式について、 のような規則$$...$$以外のものをどのように定義できますか。うまくいかないだろうと思います。$$[^\$]*[^\$\$]*

4

1 に答える 1

1

パターンが一致する方法を理解していないと思います。フレックスマニュアルを参照してください

Flex は常に、可能な限り長い入力に一致させようとします。ルールが長いほど優先度が高くなることは、ある程度理解できます。

「\$\$」は 2 文字と「.」に一致するためです。以下の例は問題なく動作します。

%x EQN2

\$\$ { BEGIN(EQN2); }
<EQN2>{
    \$\$ { BEGIN(INITIAL); }
    . {} 
}

ルールが同じサイズの入力に一致する場合、lex.l の最初のものが優先されるため、例で[^\$]* {}置き換えることもできます。. {}

于 2013-02-15T01:57:39.577 に答える