我可以使用"或"在写lex模式的同时?

时间:2017-02-06 14:04:10

标签: lex

我可以写下这样的内容:

">" | "<" | "!="  {printf("Operator");}

我不想为许多模式重复相同的C代码。有没有办法用lex写这样的多个模式?

1 个答案:

答案 0 :(得分:0)

您可以通过以下两种方式之一完成此操作:

  1. 使用|正则表达式运算符(可能与字符类结合使用)。请记住,(f)lex正则表达式可能不包含未加引号的空格:

    ">"|"<"|"!="  {printf("Operator");}
    

    或:

    [<>]|"!="     { printf("Operator");}
    

    值得一读Flex manual section on patterns

  2. 使用特殊操作|。在这种情况下,|必须以空格开头,并且应该是该行的最后一件事:

    ">"           |
    "<"           |
    "!="          {printf("Operator");}
    

    您可以在Flex manual section on actions中找到使用此特殊操作的示例。注意要求(强调增加):

      

    包含完全垂直条(“|”)的操作意味着“与下一个规则的操作相同”

  3. 通常,第一种选择会更好,但有些情况(主要涉及REJECT动作,如手册中有些人为的例子)|特殊动作可能有用。对于复杂的模式,它可以使(f)lex源更具可读性。