%{
#include<stdio.h>
int n_chars = 0;
int n_lines = 0;
%}
%%
"if"|"else"|"while"|"do"|"switch"|"case" {
printf("Keyword");
}
[a-zA-Z][a-z|0-9]* {printf("Identifier");}
[0-9]* {printf("Number");}
"!"|"@"|"*"|"&"|"^"|"%"|"$"|"#" {printf("Special Character");}
\n { ++n_lines, ++n_chars; }
. ++n_chars;
%%
int yywrap() {
return 1;
}
main(int argc[], char *argv[]) {
yyin = fopen("index.txt", "r");
printf("Number of characters is: %d", n_chars);
yylex();
return 0;
}
我上面的代码返回:字符数为:0
我的文件index.txt
的内容为:
如果您好#
同时1
进行测试
为什么它返回0
?我期望的是所有字符的数量,并且还应该告诉我它是keyword
,identifier
还是special character
。
我一定做错了,因为我对此很陌生。 我正在使用EditPlus。因此,任何帮助将不胜感激!
答案 0 :(得分:0)
您的代码至少有两个问题。
n_chars
之前先打印yylex
。.
的最后一条规则将不会与上述规则之一匹配的任何内容匹配,因此使用这种方法将不会获得字符数。首先调用yylex
,我会得到“其他”字符的数量,例如空格和换行符。
要计算所有字符,您可以
n_chars += strlen (yytext);
,以计算该规则匹配的字符。REJECT
添加到前四个规则以继续搜索,并因此将.
与动作++n_chars;
相匹配。