文件:myscanner.h
#define TYPE 1
#define NAME 2
#define TABLE_PREFIX 3
#define PORT 4
#define COLON 5
#define IDENTIFIER 6
#define INTEGER 7
将文件输入扫描仪:
db_type : mysql
\n
db_name : textdata
db_table_prefix : test_
db_port : a1099
如果myscanner.l是:
%{
#include "myscanner.h"
int nl=0;
%}
%%
: return COLON;
"db_type" return TYPE;
"db_name" return NAME;
"db_table_prefix" return TABLE_PREFIX;
"db_port" return PORT;
[a-zA-Z][_a-zA-Z0-9]* {return IDENTIFIER;}
[1-9][0-9]* return INTEGER;
[ \t] ;
\n yylineno++;
. printf("unexpected character\n");
%%
int yywrap(void)
{
return 1;
}
然后在输入文件的第2行显示错误为意外字符()。 如果myscanner.l是:
%{
#include "myscanner.h"
int nl=0;
%}
%%
: return COLON;
"db_type" return TYPE;
"db_name" return NAME;
"db_table_prefix" return TABLE_PREFIX;
"db_port" return PORT;
"\n" nl++;
[a-zA-Z][_a-zA-Z0-9]* {return IDENTIFIER;}
[1-9][0-9]* return INTEGER;
[ \t] ;
\n yylineno++;
. printf("unexpected character\n");
%%
int yywrap(void)
{
return 1;
}
然后将myscanner.l传递给lex本身说错误"该规则无法匹配
\n yylineno++;
我的问题是: 如果我必须在我的文件中将\ n作为两个字符的组合来做怎么办' \'接着是' n'?
答案 0 :(得分:0)
你需要逃避反斜杠:
"\\n" { /* Will match \n */ }