1

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

%x EQN1

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

对于 之间的方程式$$...$$,我如何定义除$$规则之外的任何内容,例如在[^\$]*. 估计[^\$\$]*行不通

4

1 回答 1

1

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

Flex 总是尽量匹配最长的输入。您可以这样理解,更长的规则具有更高的优先级。

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

%x EQN2

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

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

于 2013-02-15T01:57:39.577 回答