lex 程序启动条件

规则可以与任何启动条件关联。

但是,lex 程序仅当处于关联的启动条件下时才识别规则。 您可以随时更改当前启动条件。

使用下面形式的行在说明文件的定义部分定义启动条件:
%Start  name1 name2

其中name1name2定义表示条件的名称。 条件的数量没有限制,它们可以以任何顺序出现。 您也可以将单词 Start 缩短为 s 或者 S

在规范文件的规则部分中使用启动条件时,请将启动条件的名称括在<>(小于,大于) 规则开头的符号。 以下示例定义 lex 程序仅在 lex 程序处于启动状态时识别的规则 expressionname1:
<name1> expression
要将 lex 程序置于特定启动条件中,请在规则的操作部分中执行操作语句; 例如,BEGIN在以下行中:
BEGIN name1;

此语句将启动条件更改为name1.

要恢复正常状态,请输入:
BEGIN 0;
BEGIN INITIAL;

其中INITIAL定义为0lex 程序。BEGIN 0;lex 程序复位为其初始条件。

lex 程序还支持 %x(百分号,小写 x)或者 %X(百分号,大写 X)运算符所指定的互斥启动条件,运算符后面是与通常的启动条件格式相同的互斥启动名称的列表。 互斥启动条件与通常的启动条件的区别在于:当词法分析器处于互斥启动状态下时,不以启动条件开始的规则是不活动的。 例如:
%s      one
%x      two
%%
abc     {printf("matched ");ECHO;BEGIN one;}
<one>def         printf("matched ");ECHO;BEGIN two;}
<two>ghi         {printf("matched ");ECHO;BEGIN INITIAL;}

在上述示例中处于启动状态 1 ,abcdef可以匹配。 处于启动状态 2 ,仅ghi可以匹配。