Flex bison简单示例

Flex bison简单示例,bison,flex-lexer,Bison,Flex Lexer,我正在从约翰·R·莱文的书中学习flex和bison。我想读一首“选择;”语句(这是代码读取的文件内容),但我收到“flex scanner卡住”。代码有什么问题 lexer:pmysql.l %option noyywrap nodefault yylineno case-insensitive %{ #include "pmysql.tab.h" #include <stdarg.h> #include <string.h> void yyerror(char *s

我正在从约翰·R·莱文的书中学习flex和bison。我想读一首“选择;”语句(这是代码读取的文件内容),但我收到“flex scanner卡住”。代码有什么问题

lexer:pmysql.l

%option noyywrap nodefault yylineno case-insensitive
%{
#include "pmysql.tab.h"
#include <stdarg.h>
#include <string.h>

void yyerror(char *s, ...);

%}

%%

"SELECT"  { return SELECT; }
[-+&~|^/%*(),.;!]   { return yytext[0]; }

%%

如果找不到单词
“请选择”
,或任何标点符号
-+&~ | ^/%*(),则扫描仪不知道该做什么。在末尾添加一个catch all:

 . { printf("unknown character in input: %c\n", *yytext) }

我试过了,但结果还是一样。我想它会找到“SELECT”,因为它会打印它。那么匹配
\n
(不包括在
中)的规则呢?对不起,似乎我忘记处理换行符了。将[\t\n]添加到lexer可以解决此问题。
rpn: SELECT
rpn: STMT
flex scanner jammed
 . { printf("unknown character in input: %c\n", *yytext) }