2
我想要加快Flex和Bison的速度。我可以用一種非常簡單的「語言」來解析一個標記,但即使這個標記是合法的,它也會在第二個標記上失敗。在處理一個令牌後的野牛中的語法錯誤
test.l:
%{
#include <stdio.h>
#include "test.hpp"
%}
%%
[0-9]+ {printf("Number entered\n"); return INTEGER_NUMBER;}
[a-zA-Z]+ {printf("plain text entered: '%s'\n",yytext); return PLAIN_TEXT;}
[ \t] ;
. ;
%%
test.y
%{
#include <stdio.h>
extern "C" {
int yyparse(void);
int yylex(void);
int yywrap() { return 1; }
extern int yylineno;
extern char* yytext;
extern int yylval;
}
/* #define YYSTYPE char * */
void yyerror(const char *message)
{
fprintf(stderr, "%d: error: '%s' at '%s', yylval=%u\n", yylineno, message, yytext, yylval);
}
main()
{
yyparse();
}
%}
%token PLAIN_TEXT INTEGER_NUMBER
%%
test : text | number;
text : PLAIN_TEXT
{
/*printf("plain text\n");*/
};
number : INTEGER_NUMBER
{
/*printf("number\n");*/
};
%%
結果:
$ ./test
cat
plain text entered: 'cat'
dog
plain text entered: 'dog'
1: error: 'syntax error' at 'dog', yylval=0
$ ./test
34
Number entered
34
Number entered
1: error: 'syntax error' at '34', yylval=0
爲什麼我會得到這個語法錯誤?
哦,伊勢,那很美。當你看到它時,這是非常明顯的,但我不認爲我會一個人去那裏。我不得不做一個小小的mod來編譯它。我不得不把'測試'這一行的右邊放在一個'|'的行上,在行的開始。 (我嘗試將每行加上4個空格作爲代碼添加,但不能保留換行符。) – 2011-04-27 19:28:12