gpt4 book ai didi

c - Flex 分析器 -- bash 语法错误接近意外标记 '('

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:40 25 4
gpt4 key购买 nike

我是 FLEX 的 super 新手,我正在尝试编写一个简单的 FLEX lex 文件,但由于某种原因,我在标题中遇到了错误。

完整的错误是:

bash syntax error near unexpected token '('

我正在运行的命令是:

flex sample.lex 

flex sample.l 

我哪里出错了?

%{

union{
int val;
char name [30];
char str [80];
}yylval;

#include <stdio.h>
%}

%%
. ECHO;
%%

int main(int argc, char **argv)
{
if (argc != 2) {
printf("no input file>\n");
exit (1);
}

printf("token lexeme attribute\n");
printf("--------------------------\n");
yyin=fopen(argv[1], "r");
if(yyin!=0)
{ printf("file opened");
fclose(yyin);}

exit (0);
}
int yywrap () { return 1; }

最佳答案

您是否在文件上运行 Flex,然后运行 ​​GCC?我能够编译这个。首先,运行

flex test.l

这应该会生成一个名为“lex.yy.c”的文件,它是由 Flex 生成的 C 代码。此文件包含扫描输入的代码,以及 .l 文件中的 C 代码。然后运行

gcc lex.yy.c

应该产生一个可执行文件“a.out”。运行

./a.out test.txt

生成了您正在打印的输出,包括“文件已打开”。正如所指出的,main 没有返回类型,但我想我的编译器能够找出它。

但是,即使您可以编译它,看起来您还是误解了 Flex 的某些方面。

union{
int val;
char name [30];
char str [80];
}yylval;

是一个普通的 C union 体。 Bison 的 %union 声明用于语义值可以有多种类型且不是同一事物的情况。 %union 不应该在 .l 文件中。

此外,您需要调用 yylex() 才能真正开始扫描输入。

现在,我建议阅读 Flex 手册并做一些入门示例:http://westes.github.io/flex/manual/Simple-Examples.html .如果您同时使用 Flex 和 Bison,您还应该查看一些 Bison 示例:http://www.gnu.org/software/bison/manual/html_node/Examples.html#Examples

关于c - Flex 分析器 -- bash 语法错误接近意外标记 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094922/

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