我可以写下这样的内容:
">" | "<" | "!=" {printf("Operator");}
我不想为许多模式重复相同的C代码。有没有办法用lex写这样的多个模式?
答案 0 :(得分:0)
您可以通过以下两种方式之一完成此操作:
使用|
正则表达式运算符(可能与字符类结合使用)。请记住,(f)lex正则表达式可能不包含未加引号的空格:
">"|"<"|"!=" {printf("Operator");}
或:
[<>]|"!=" { printf("Operator");}
使用特殊操作|
。在这种情况下,|
必须以空格开头,并且应该是该行的最后一件事:
">" |
"<" |
"!=" {printf("Operator");}
您可以在Flex manual section on actions中找到使用此特殊操作的示例。注意要求(强调增加):
包含完全垂直条(“|”)的操作意味着“与下一个规则的操作相同”
通常,第一种选择会更好,但有些情况(主要涉及REJECT
动作,如手册中有些人为的例子)|
特殊动作可能有用。对于复杂的模式,它可以使(f)lex源更具可读性。