gpt4 book ai didi

tokenize - Flex 中 token 匹配的优先顺序

转载 作者:行者123 更新时间:2023-12-02 21:58:28 26 4
gpt4 key购买 nike

如果该主题的标题有点令人困惑,我深表歉意。我想问的是Flex(词法分析器)如何处理优先级问题?

例如,假设我有两个具有相似正则表达式的标记,按以下顺序编写:

"//"[!\/]{1}    return FIRST;
"//"[!\/]{1}\< return SECOND;

给定输入“//!<”,会返回 FIRST 或 SECOND 吗?或两者?

第一个字符串将在第二个字符串之前到达,但似乎返回第二个字符串是正确的行为。

最佳答案

返回最长的匹配项。

来自flex & bison, Text Processing Tools :

How Flex Handles Ambiguous Patterns

Most flex programs are quite ambiguous, with multiple patterns that can match the same input. Flex resolves the ambiguity with two simple rules:

  • Match the longest possible string every time the scanner matches input.
  • In the case of a tie, use the pattern that appears first in the program.

当然,您可以自己测试一下:

文件:demo.l

%%
"//"[!/] {printf("FIRST");}
"//"[!/]< {printf("SECOND");}
%%

int main(int argc, char **argv)
{
while(yylex() != 0);
return 0;
}

请注意/<不需要转义,并且{1}是多余的。

bart@hades:~/Programming/GNU-Flex-Bison/demo$ flex demo.l 
bart@hades:~/Programming/GNU-Flex-Bison/demo$ cc lex.yy.c -lfl
bart@hades:~/Programming/GNU-Flex-Bison/demo$ ./a.out < in.txt
SECOND

哪里in.txt包含//!< .

关于tokenize - Flex 中 token 匹配的优先顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com