你如何在lex中声明这个宏?

时间:2016-02-05 13:49:53

标签: flex-lexer lex

我是Lex的新手,我对如何声明以下宏关键字感到困惑。我希望关键字由“if”,“then”,“else”或“while”组成。

我在lex中输入了这个:

keyword                   "if" | "then" | "else" | "while"

但是编译器给了我一个“无法识别的规则错误”。当我改为

keyword                   "if"

编译好。

这只是Lex的限制吗?我知道在jflex你可以做我上面做的事情,它会工作正常。或者我做错了吗?

由于

1 个答案:

答案 0 :(得分:0)

我现在无法对此进行测试,但我不知道如何:

尝试将值放在括号中(在第一个%%之前)

keyword                   ("if"|"then"|"else"|"while")

然后在像这样的规则中使用它(在%%和%%之间):

{keyword}   {//action}

这是你在lex中创建一个类的方法,所以在其余的代码中你可以使用{keyword},它将被识别为你在定义部分中指定的正则表达式(在第一个之前) %%)。 此外,您可以将类用作其他正则表达式的一部分:

{keyword}\{[^\}]\}   {//action}

这可以识别整个代码块。 (但它没有检查块内的语法,我把它留给你:))