莱克斯没有返回我想要的东西
Lex is not returning what I want
%{
#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。因此,任何帮助将不胜感激!
你的代码至少有两个问题。
- 在调用
yylex
之前打印n_chars
。 .
的最后一个规则不会与上述规则之一匹配的任何规则匹配,因此使用此方法不会获得字符数。
首先调用yylex
,我得到"其他"字符的数量,例如空格和换行符。
要计算所有字符,您可以
- 将语句
n_chars += strlen (yytext);
添加到前四个规则中,以计算与规则匹配的字符。 - 将语句
REJECT
添加到前四个规则中以继续搜索,从而将.
与操作++n_chars;
进行匹配。
相关文章:
- 如何设置一个范围来提取我想要获得的信息
- 链接列表运算符重载没有打印出我想要的内容
- 莱克斯没有返回我想要的东西
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 我想要一个具有子函数的函数访问相同的命名函数,而不使用它取决于其子类的类
- 如何让m_refcount变量打印出我想要的值而不是垃圾
- 我想要一个改变数组快速排序的2个数字的函数
- 输出不是我想要C++的
- 使用运算符覆盖排序没有得到我想要的
- C ++,否则文本程序不会进入我想要的途径
- 如何声明一个未知大小的数组,然后输入直到我想要,然后获取数组的大小
- 我如何使用 juce 的文件过滤器描述我想要的文件过滤器?
- 如何设置此视觉工作室 (2015) 自定义生成步骤(工具?基本上,我想要一个修改头文件(c ++)的预处理器步骤
- 代码不会发送我想要的权衡
- 无法在openGL和GLUT中为我想要的确切对象设置动画
- 我如何强迫Visual Studio使用我想要的依赖性库名称
- 我的 OpenGL QQuickItem 没有我想要的大小
- 我可以/应该在 #ifndef 后输入任何我想要的东西
- 函数不返回我想要的值
- 为什么Clang有时返回nullptr,有时返回我想要的