Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operators Flex(词法分析器){+;}和{-}运算符_Operators_Flex Lexer - Fatal编程技术网

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

Operators Flex(词法分析器){+;}和{-}运算符,operators,flex-lexer,Operators,Flex Lexer,我正在尝试使用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_

我正在尝试使用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}

有什么办法使它起作用吗?这些运算符可以在没有方括号的情况下使用吗?

{-}
运算符只在
[a-z]
之类的字符类上工作,而不在完整的正则表达式或字符串上工作
flex
不支持更通用的
{-}
运算符。当然,
{+}
更通用的版本是
|
。通常,如果两个模式匹配同一个字符串,那么将使用第一个模式,这一事实就解决了您的特定问题。因此,将规范更改为以下内容实际上将从
ID
s中排除所有关键字

%%
"char"|"else"|"if"|"class"|"new"|"return"|"void"|"while"|"int"  { return KEYWORD; }
[a-zA-Z_][a-zA-Z0-9_]*   { return ID; }
%%