在lex中,我可以为$...$
之间定义的方程定义以下起始条件。
%x EQN1
\$ { BEGIN(EQN1); }
<EQN1>{
\$ { BEGIN(INITIAL); }
[^\$]* {}
}
对于$$...$$
之间的等式,我如何定义除$$
规则之外的任何内容,例如在[^\$]*
中。我猜[^\$\$]*
不起作用。
答案 0 :(得分:1)
我认为您不了解模式的匹配方式,请参阅flex manual
Flex始终尝试匹配可能的最长输入。你可以理解它,更长的规则具有更高的优先级。
因为“\ $ \ $”匹配两个字符和“。”只有一个,下面的例子就可以了。
%x EQN2
\$\$ { BEGIN(EQN2); }
<EQN2>{
\$\$ { BEGIN(INITIAL); }
. {}
}
您也可以在示例中将[^\$]* {}
替换为. {}
,因为当规则匹配相同的输入大小时,lex.l中的第一个具有更高的优先级。