gpt4 book ai didi

正则表达式捕捉行首没有空格(flex)

转载 作者:行者123 更新时间:2023-12-04 06:32:44 28 4
gpt4 key购买 nike

我正在为编译器构造类开发用于 Python 语法(用 Flex 编写)的词法分析器,当行首没有空格时,我无法获得正确工作的正则表达式来捕获(为了说明)用于缩进块的结尾)。

检查无缩进的规则出现在检查注释、空行和缩进的规则之后。这也是在规则检查其他任何事情之前。这是它现在的样子:

<INITIAL>^[^ \t] {
printf("DEBUG: Expression ^[^ \\t] matches string: %s\n", yytext);

/* Dedent to 0 if not mid-expression */
if(!lineJoin && bracketDepth() == 0)
changeIndent(0);

/* Treat line as normal */
REJECT;
}

据我了解,上面的规则应该为词法文件中具有实际 python 代码但不以缩进开头的任何行输出该调试行。然而,就目前而言,我的许多文本案例中很少有行显示它。

例如,此测试用例的调试输出无处可见(它也完全错过了第 4 行的 dedent):
myList = [1,2,3,4]
for index in range(len(myList)):
myList[index] += 1
print( myList )

但出现在这一行中的每一行:
a = 1 + 1
b = 2 % 3
c = 1 ^ 1
d = 1 - 1
f = 1 * 1
g = 1 / 1

鉴于大多数其他规则都能正常工作,我相信正则表达式是上述规则中的问题,但我不明白为什么这个规则在大多数时候都失败了。有没有人有任何见解?

最佳答案

我不知道 flex,但我观察到每个有效的样本都是一个字符,而每个无效的样本都不是。也许 flex 匹配整个 token 而不是单个字符?您可以尝试添加 +在字符类之后。

关于正则表达式捕捉行首没有空格(flex),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207813/

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