[英]Flex (lexical analyzer) {+} and {-} operators
我正在尝试使用Flex制作一个简单的扫描仪。 在声明部分,我试图使用{-}运算符从ID中排除保留字,但无法使其正常工作。 我发现的每个示例都使用{+}和{-}运算符,如以下代码所示:
[a-z]{-}[d]
但是,我试图像下面的代码一样使用这些运算符,但是我总是会出错:
invalid_id "char"|"else"|"if"|"class"|"new"|"return"|"void"|"while"|"int"
all_ids [a-zA-Z_][a-zA-Z0-9_]*
id {all_ids}{-}{invalid_id}
有什么办法可以使其工作? 这些运算符可以不带方括号使用吗?
{-}
和{+}
运算符仅适用于像[az]
这样的字符类,不适用于完整的正则表达式或字符串。 flex
不支持更通用的{-}
运算符。 当然,更一般的{+}
版本是|
。 通常,如果两个模式匹配相同的字符串,则将使用第一个模式,从而解决了您的特定问题。 因此,将您的规范更改为以下内容实际上将排除ID
的所有关键字。
%%
"char"|"else"|"if"|"class"|"new"|"return"|"void"|"while"|"int" { return KEYWORD; }
[a-zA-Z_][a-zA-Z0-9_]* { return ID; }
%%
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.