如何在Flex中的另一个定义中使用以前的正则表达式定义?

时间:2012-05-10 02:10:52

标签: c bison flex-lexer

假设我有关键字定义(不区分大小写):

CLASS    (c|C)(l|L)(a|A)(s|S){2}
IF       (i|I)(f|F)
...more....

现在我要定义一个KEYWORD,其中包含所有关键字:

KEYWORD   (CLASS|IF| ....more....)
IDENTIFIER     [^KEYWORD][a-zA-Z0-9]

但是,这样做,它只会将CLASS视为字符串而不会被先前的定义所取代。此外,我想在KEYWORD中使用IDENTIFIER定义,它是否有效(让我们假设KEYWORD被替换)?

1 个答案:

答案 0 :(得分:2)

好的,我在这里找到了如何使用之前的定义:http://dinosaur.compilertools.net/flex/flex_6.html#SEC6

我们必须在之前的定义中添加{}:

KEYWORD   ({CLASS}|{IF}| ....more....)
IDENTIFIER     [^{KEYWORD}][a-zA-Z0-9]

我回答自己,以备将来参考。