flex++ 产生的词法分析器当解析出TOKEN后,如何传给bison++产生的语法分析器中???

lchenll 2005-12-06 06:01:54
/**
这是我的parser.y 文件
**/
%name Parser
%define LSP_NEEDED
%define MEMBERS private:\
yyFlexLexer lexer;\
int error();

%define LEX_BODY {return lexer.yylex();}
%define ERROR_BODY {error();}
%header{
#include <iostream>
#include <fstream>
#include <FlexLexer.h>
#include <string>
using namespace std;
%}

%union {int i_type;char c_type;}
%token UNKNOWN
%token <c_type> NUMBER
%token <c_type> COMMA
%type <c_type> number
%start number
%%
number: NUMBER COMMA NUMBER{std::cout <<"$1 = "<<$1<<std::endl;
std::cout <<"$3 = "<<$3<<std::endl;
}
;
%%
int Parser::error()
{
cout << "grammar error\n"<<endl;
return 1;
}

/*******************************************
这是我的scanner.l文件
********************************************/

%option c++
%option noyywrap
%{
#include<sstream>
#include<iostream>
#include <cstdlib>
#include "parser.h"
%}

DIGIT1 [1-9]
%%
{DIGIT1}* {cout <<"Lexer: "<< yytext <<endl;return Parser::NUMBER;}
[,] {std::cout <<"Lexer: "<< yytext <<std::endl;return Parser::COMMA;}
. {return Parser::UNKNOWN;}
<<EOF>> {yyterminate();}
%%


/*******************************************
这是我的主函数文件
********************************************/
#include "parser.h"
#include <iostream>
#include "FlexLexer.h"
using namespace std;


int main()
{
Parser parser;
parser.yyparse();
return 0;
}

*********************************************
我是在Linux环境下编译的
parser.y是用Bison++产生的语法解析器,用的命令是这样
命令:bison++ -d -h parser.h -o parser.cpp parser.y
此命令将产生一个Parser类,它的头文件是parser.h,源文件是parser.cpp


scanner.l是用FLex++产生的词法分析器,用的命令是这样
命令:flex++ -d -oscanner.cpp scanner.l
此命令将产生一个词法分析器scanner.cpp


test.cpp是主函数利用如下命令编译,将产生可执行程序run
g++ -o run parser.cpp oscanner.cpp test.cpp

./run //执行run后,语法分析器无法打印出解析出的TOKEN(即输入的数字) $1 ,$3
我想是scanner.l中有些什么语句没写以至不能向语法解析器传送解析出的TOKEN造成的
那我因该如何把词法解析器残生产生的TOKEN,传入语法分析器中,才能打印出$1=
$2=
...全文
268 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
RobinKin 2005-12-11
  • 打赏
  • 举报
回复
要自己把代码弄过去 不是自动生成的,把flex++里生成的词法分析代码COpy到bison++ 生成的语法分析代码里去

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧