gpt4 book ai didi

c - 在功能 ‘yylex’ : 'Variable’ undeclared

转载 作者:太空狗 更新时间:2023-10-29 16:10:25 27 4
gpt4 key购买 nike

我正在使用词法分析。为此,我使用 Flex然后我获取以下问题。

工作.l

int cnt = 0,num_lines=0,num_chars=0; // Problem here.
%%
[" "]+[a-zA-Z0-9]+ {++cnt;}
\n {++num_lines; ++num_chars;}
. {++num_chars;}
%%
int yywrap()
{
return 1;
}
int main()
{ yyin = freopen("in.txt", "r", stdin);
yylex();
printf("%d %d %d\n", cnt, num_lines,num_chars);
return 0;
}

然后,我使用以下命令,它可以正常工作并创建 lex.yy.c .

Rezwans-iMac:laqb-2 rezwan$ flex work.l


然后,我使用以下命令。

Rezwans-iMac:laqb-2 rezwan$ gcc lex.yy.c -o b

并获得关注 error :

work.l: In function ‘yylex’:
work.l:3:4: error: ‘cnt’ undeclared (first use in this function); did you mean int’?
[" "]+[a-zA-Z0-9]+ {++cnt;}
^~~
int
work.l:3:4: note: each undeclared identifier is reported only once for each function it appears in
work.l:4:4: error: ‘num_lines’ undeclared (first use in this function)
\n {++num_lines; ++num_chars;}
^~~~~~~~~
work.l:4:17: error: ‘num_chars’ undeclared (first use in this function); did you mean ‘num_lines’?
\n {++num_lines; ++num_chars;}
^~~~~~~~~
num_lines
work.l: In function ‘main’:
work.l:15:23: error: ‘cnt’ undeclared (first use in this function); did you mean ‘int’?
return 0;
^
int
work.l:15:28: error: ‘num_lines’ undeclared (first use in this function)
return 0;
^
work.l:15:38: error: ‘num_chars’ undeclared (first use in this function); did you mean ‘num_lines’?
return 0;
^
num_lines

我没有超过 error ,如果我修改 work.l像这样的文件。

    int cnt = 0,num_lines=0,num_chars=0; // then work properly above command.
%%
[" "]+[a-zA-Z0-9]+ {++cnt;}
\n {++num_lines; ++num_chars;}
. {++num_chars;}
%%
int yywrap()
{
return 1;
}
int main()
{ yyin = freopen("in.txt", "r", stdin);
yylex();
printf("%d %d %d\n", cnt, num_lines,num_chars);
return 0;
}

也就是说,如果我使用1 tab在此行之前 int cnt = 0,num_lines=0,num_chars=0; , 它工作正常。

现在我有两个问题:

  1. 有必要使用1 tab在此行之前 int cnt = 0,num_lines=0,num_chars=0; ?为什么?逻辑解释。

  2. 是否有解决此错误的另一种解决方案?

最佳答案

我不太确定制表符问题,但一个解释是,如果您不放置制表符并在第一部分中写下类似内容:

int cnt = 0;

然后请注意,在第一部分中,您还可以编写“快捷方式”,例如:

Digit  [0-9] 

这是一个正则表达式,它定义了数字是什么,而不是一直写 [0-9] 来表示数字。

因此,当在第一列中编写 int cnt = 0; 而不使用制表符时,就像定义关键字 int 一样(这可能就是错误告诉您 did you mean int'?)。所以tab是区分以上两种情况的一种方式。

According to flex in order to write c/c++ code it needs to be inside: %{ ... c/c++ code... %} so for your example:

%{
int cnt = 0,num_lines=0,num_chars=0;
%}

所以我认为最好的方法是在 %{ %} 中编写您的 C 代码。

关于c - 在功能 ‘yylex’ : 'Variable’ undeclared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46407068/

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