Flex bison简单示例
我正在从约翰·R·莱文的书中学习flex和bison。我想读一首“选择;”语句(这是代码读取的文件内容),但我收到“flex scanner卡住”。代码有什么问题 lexer:pmysql.lFlex 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
%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) }