Lex 程序什么都不做
Lex program doesn't do anything
我正在尝试使用 Lex 编写一个程序,它可以识别一些字母、数字并做一些小事。问题是程序无法识别任何东西。事实上,我将规则更改为一个简单的规则来识别所有内容,但仍然不执行任何操作。发生了什么?也许它很简单(一定很简单,行数很少),但我是 Lex 的新手,我无法修复它。谢谢
simple.l:
%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int count = 0;
%}
/*Reglas*/
%%
[a-zA-Z_]*[a-zA-Z_0-9]* { count++; printf("%s ", yytext); }
.* { count++; printf("%s ", yytext); }
%%
/*Procedimientos de usuario*/
int main(int argc, char * argv[]) {
FILE * yyin;
if(argc == 2) {
yyin =fopen(argv[1],"rt");
if(yyin == NULL) {
printf("File %s can not be opened\n", argv[1]);
exit(-1);
}
} else {
printf("Error in arguments");
exit(-1);
}
yylex();
printf("Counter : %d \n", count);
fclose(yyin);
return 0;
}
输入文件:example.txt
CSC104H1
CSC108H1
CSC204H1
CSC258H1
此外,我需要使用 ctrl+d 来完成程序(如我在 Whosebug 中看到的那样),否则程序不会自行完成。
int main(int argc, char * argv[]) {
FILE * yyin;
// ...
yyin = ....
}
这里,yyin
是一个局部变量。扫描器正在使用具有相同名称的全局变量,此声明正在隐藏它。
删除声明即可。
您的第一个线索是扫描器显然是从标准输入中读取,而不是从您指定的文件中读取,这就是它等待您键入文件结束指示符的原因。
我正在尝试使用 Lex 编写一个程序,它可以识别一些字母、数字并做一些小事。问题是程序无法识别任何东西。事实上,我将规则更改为一个简单的规则来识别所有内容,但仍然不执行任何操作。发生了什么?也许它很简单(一定很简单,行数很少),但我是 Lex 的新手,我无法修复它。谢谢
simple.l:
%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int count = 0;
%}
/*Reglas*/
%%
[a-zA-Z_]*[a-zA-Z_0-9]* { count++; printf("%s ", yytext); }
.* { count++; printf("%s ", yytext); }
%%
/*Procedimientos de usuario*/
int main(int argc, char * argv[]) {
FILE * yyin;
if(argc == 2) {
yyin =fopen(argv[1],"rt");
if(yyin == NULL) {
printf("File %s can not be opened\n", argv[1]);
exit(-1);
}
} else {
printf("Error in arguments");
exit(-1);
}
yylex();
printf("Counter : %d \n", count);
fclose(yyin);
return 0;
}
输入文件:example.txt
CSC104H1
CSC108H1
CSC204H1
CSC258H1
此外,我需要使用 ctrl+d 来完成程序(如我在 Whosebug 中看到的那样),否则程序不会自行完成。
int main(int argc, char * argv[]) {
FILE * yyin;
// ...
yyin = ....
}
这里,yyin
是一个局部变量。扫描器正在使用具有相同名称的全局变量,此声明正在隐藏它。
删除声明即可。
您的第一个线索是扫描器显然是从标准输入中读取,而不是从您指定的文件中读取,这就是它等待您键入文件结束指示符的原因。