flex和bison学习记录-flex学习
%{ int chars = 0; int words = 0; int lines = 0; %} %% [a-zA-Z]+ { words++; chars += strlen(yytext); } \n { lines++;} [ \t]+ { /* 忽略空格 */ } . { chars++; } %% int main(int argc, char **argv) { yylex(); printf("\n%8d%8d%8d\n", chars, words, lines); return 1; }
说明:
%{
%}
是声明部分,声明部分定义了3个变量,分别是字符数,单词数,行数
%%
%%
之间是模式匹配部分,定义了匹配规则
最后是main主函数。将代码保存为 flex1.l
注意:
- 在调用flex flex1.l 生成 lex.yy.c 文件后,执行链接命令MAC环境要使用 -ll 即 cc lex.yy.c -ll
- main函数不能是无返回值类型,要声明返回值类型是int