我是Lex的新手,我对如何声明以下宏关键字感到困惑。我希望关键字由“if”,“then”,“else”或“while”组成。
我在lex中输入了这个:
keyword "if" | "then" | "else" | "while"
但是编译器给了我一个“无法识别的规则错误”。当我改为
时keyword "if"
编译好。
这只是Lex的限制吗?我知道在jflex你可以做我上面做的事情,它会工作正常。或者我做错了吗?
由于
答案 0 :(得分:0)
我现在无法对此进行测试,但我不知道如何:
尝试将值放在括号中(在第一个%%之前)
keyword ("if"|"then"|"else"|"while")
然后在像这样的规则中使用它(在%%和%%之间):
{keyword} {//action}
这是你在lex中创建一个类的方法,所以在其余的代码中你可以使用{keyword}
,它将被识别为你在定义部分中指定的正则表达式(在第一个之前) %%)。
此外,您可以将类用作其他正则表达式的一部分:
{keyword}\{[^\}]\} {//action}
这可以识别整个代码块。 (但它没有检查块内的语法,我把它留给你:))