繁体   English   中英

Flex(词法分析器){+}和{-}运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM