TeX方程的起始条件

时间:2013-02-12 23:07:54

标签: lex

在lex中,我可以为$...$之间定义的方程定义以下起始条件。

%x EQN1

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

对于$$...$$之间的等式,我如何定义除$$规则之外的任何内容,例如在[^\$]*中。我猜[^\$\$]*不起作用。

1 个答案:

答案 0 :(得分:1)

我认为您不了解模式的匹配方式,请参阅flex manual

Flex始终尝试匹配可能的最长输入。你可以理解它,更长的规则具有更高的优先级。

因为“\ $ \ $”匹配两个字符和“。”只有一个,下面的例子就可以了。

%x EQN2

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

您也可以在示例中将[^\$]* {}替换为. {},因为当规则匹配相同的输入大小时,lex.l中的第一个具有更高的优先级。