gpt4 book ai didi

regex - 如何在 lex 中创建没有特定字母组的正则表达式

转载 作者:行者123 更新时间:2023-12-04 20:36:41 25 4
gpt4 key购买 nike

我最近开始学习 lex ,所以我正在练习并决定制作一个识别正常变量声明的程序。 (有点)

这是我的代码:

%{
#include "stdio.h"
%}
dataType "int"|"float"|"char"|"String"
alphaNumeric [_\*a-zA-Z][0-9]*
space [ ]
variable {dataType}{space}{alphaNumeric}+
%option noyywrap
%%
{variable} printf("ok");
. printf("incorect");
%%
int main(){
yylex();
}

输出应返回 ok 的某些情况
int var3
int _varR3
int _AA3_

如果我输入作为输入: int float ,它返回 ok ,这是错误的,因为它们都是保留字。

所以我的问题是我应该修改什么以使我的表达式忽略空格后的“dataType”字样?

谢谢你。

最佳答案

初步考虑:通常,您指出的构造的检测不是在词法分析阶段完成,而是在解析阶段完成。例如,在 yacc/bison 上,您将有一个仅匹配“类型”标记后跟“标识符”标记的规则。

不过,要使用 lex/flex 实现这一点,您可以考虑使用否定 (^) 和尾随上下文 (/) 运算符。或者...

如果您正在运行 flex,也许只是用括号将所有正则表达式括起来并传递 -l flag 可以解决问题。请注意,lex 和 flex 之间存在一些差异,如 the Flex manual 中所述。 .

关于regex - 如何在 lex 中创建没有特定字母组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108582/

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