【发布时间】:2013-08-09 09:39:42
【问题描述】:
我正在学习 flex 和 bison,我被困在这里,无法弄清楚这样一个简单的语法规则如何无法按我的预期工作,下面是词法分析器代码:
%{
#include <stdio.h>
#include "zparser.tab.h"
%}
%%
[\t\n ]+ //ignore white space
FROM|from { return FROM; }
select|SELECT { return SELECT; }
update|UPDATE { return UPDATE; }
insert|INSERT { return INSERT; }
delete|DELETE { return DELETE; }
[a-zA-Z].* { return IDENTIFIER; }
\* { return STAR; }
%%
下面是解析器代码:
%{
#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
using namespace std;
extern int yyerror(const char* str);
extern int yylex();
%}
%%
%token SELECT UPDATE INSERT DELETE STAR IDENTIFIER FROM;
ZQL : SELECT STAR FROM IDENTIFIER { cout<<"Done"<<endl; return 0;}
;
%%
谁能告诉我为什么如果我尝试输入“select * from something”会显示错误
【问题讨论】:
-
小心标记。 Flex 标签用于 Adobe/Apache UI 框架。 Flex-lexer 标签用于词法分析器。
-
在什么标记处显示什么错误?
标签: c++ parsing bison flex-lexer