- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用词法分析。为此,我使用 Flex
然后我获取以下问题。
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 tab
在此行之前 int cnt = 0,num_lines=0,num_chars=0;
?为什么?逻辑解释。
是否有解决此错误的另一种解决方案?
最佳答案
我不太确定制表符问题,但一个解释是,如果您不放置制表符并在第一部分中写下类似内容:
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/
本文整理了Java中jxl.biff.formula.Yylex.yylex()方法的一些代码示例,展示了Yylex.yylex()的具体用法。这些代码示例主要来源于Github/Stackoverf
本文整理了Java中org.json.simple.parser.Yylex.yylex()方法的一些代码示例,展示了Yylex.yylex()的具体用法。这些代码示例主要来源于Github/Stac
本文整理了Java中org.apache.dubbo.common.json.Yylex.yylex()方法的一些代码示例,展示了Yylex.yylex()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中de.odysseus.staxon.json.stream.impl.Yylex.yylex()方法的一些代码示例,展示了Yylex.yylex()的具体用法。这些代码示例主要来
本文整理了Java中com.taobao.middleware.logger.json.parser.Yylex.yylex()方法的一些代码示例,展示了Yylex.yylex()的具体用法。这些代码
我正在尝试将位置信息添加到flex和bison中。但是我的野牛仍然使用int yylex(void),但是找不到int yylex(YYSTYPE *yylval_param, YYLTYPE *yy
所以我的问题很简单,我想之前已经有人回答了,但我无法找到关于它的好线索:我可以解析一次文件,收集一些必要的信息来初始化我的结构,然后解析第二次是“真的”吗? 当我两次调用 yylex() 时,它似乎什
我在 Flex 文件的定义部分中声明全局作用域指针时遇到问题,然后我在主文件的开头 malloc 它,但是 一旦我的程序运行到yylex(),指针的值就会设置为NULL。 我在整个程序中都需要这个指向
我正在尝试学习如何构建基于 C++ 的词法分析器/解析器,我正在关注多个在线教程和指南,我的代码主要是根据这两个指南构建的:1 , 2尽管我添加和调整了我认为合适的内容。 首先,我有一个词法分析器的头
我有一个简单的 flex 源代码,它跳过 /* */ 中的注释,应该得到找到的注释数: %{ int in_comment = 0; int count = 0; %} %% \/\* { i
我正在使用词法分析。为此,我使用 Flex然后我获取以下问题。 工作.l int cnt = 0,num_lines=0,num_chars=0; // Problem here. %% [" "]+
本文整理了Java中jxl.biff.formula.Yylex.yytext()方法的一些代码示例,展示了Yylex.yytext()的具体用法。这些代码示例主要来源于Github/Stackove
本文整理了Java中jxl.biff.formula.Yylex.zzUnpackAttribute()方法的一些代码示例,展示了Yylex.zzUnpackAttribute()的具体用法。这些代码
本文整理了Java中jxl.biff.formula.Yylex.zzUnpackTrans()方法的一些代码示例,展示了Yylex.zzUnpackTrans()的具体用法。这些代码示例主要来源于G
本文整理了Java中jxl.biff.formula.Yylex.zzScanError()方法的一些代码示例,展示了Yylex.zzScanError()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中jxl.biff.formula.Yylex.zzUnpackRowMap()方法的一些代码示例,展示了Yylex.zzUnpackRowMap()的具体用法。这些代码示例主要来源
本文整理了Java中jxl.biff.formula.Yylex.zzUnpackAction()方法的一些代码示例,展示了Yylex.zzUnpackAction()的具体用法。这些代码示例主要来源
本文整理了Java中jxl.biff.formula.Yylex.getPos()方法的一些代码示例,展示了Yylex.getPos()的具体用法。这些代码示例主要来源于Github/Stackove
本文整理了Java中jxl.biff.formula.Yylex.zzRefill()方法的一些代码示例,展示了Yylex.zzRefill()的具体用法。这些代码示例主要来源于Github/Stac
本文整理了Java中jxl.biff.formula.Yylex.yybegin()方法的一些代码示例,展示了Yylex.yybegin()的具体用法。这些代码示例主要来源于Github/Stacko
我是一名优秀的程序员,十分优秀!