lex では、 の間に定義された方程式の次の開始条件を定義できます$...$
。
%x EQN1
\$ { BEGIN(EQN1); }
<EQN1>{
\$ { BEGIN(INITIAL); }
[^\$]* {}
}
の間の方程式について、 のような規則$$...$$
以外のものをどのように定義できますか。うまくいかないだろうと思います。$$
[^\$]*
[^\$\$]*
lex では、 の間に定義された方程式の次の開始条件を定義できます$...$
。
%x EQN1
\$ { BEGIN(EQN1); }
<EQN1>{
\$ { BEGIN(INITIAL); }
[^\$]* {}
}
の間の方程式について、 のような規則$$...$$
以外のものをどのように定義できますか。うまくいかないだろうと思います。$$
[^\$]*
[^\$\$]*
パターンが一致する方法を理解していないと思います。フレックスマニュアルを参照してください
Flex は常に、可能な限り長い入力に一致させようとします。ルールが長いほど優先度が高くなることは、ある程度理解できます。
「\$\$」は 2 文字と「.」に一致するためです。以下の例は問題なく動作します。
%x EQN2
\$\$ { BEGIN(EQN2); }
<EQN2>{
\$\$ { BEGIN(INITIAL); }
. {}
}
ルールが同じサイズの入力に一致する場合、lex.l の最初のものが優先されるため、例で[^\$]* {}
置き換えることもできます。. {}