Никак не могу разобраться как передать значение токена через переменную yylval. Пробую так:
файл «scanner.l»
%option c++
%option noyywrap
LETTER [A-Za-z]
DIGIT [0-9]
WORD ({LETTER}|_)({LETTER}|{DIGIT}|_)*
%{
  //#define debug
  #include<sstream>
  #include <stdio.h>
  #include "parser.h"
  #include <cstdlib>
%}
%%
{WORD}	{
	#ifdef debug
		printf("WORD | %s\n",yytext);
	#else
		yylval->string = yytext;
		return Parser::T_WORD;
	#endif
}
.	;
<<EOF>> {
	yyterminate();
}
%%файл «parser.y»
%name Parser
%define LSP_NEEDED
%define MEMBERS \
virtual ~Parser() {} \
private: \
yyFlexLexer lexer;
%define LEX_BODY {return lexer.yylex();}
%define ERROR_BODY {cerr << "error encountered at line: "\
<<lexer.lineno()<<" last word parsed:"<<lexer.YYText()<<"\n";}
%header{
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <FlexLexer.h>
using namespace std;
%}
%union {
char * string;
}
%token  <string> T_WORD
%type <int> wrds wrd
%start wrds
%%
wrds
  : /* empty */
  | wrds wrd { return 1; }
  ;
wrd
  : T_WORD { printf("WORD%s\n",$1); }
  ;
%%файл «test.cpp»
#include "parser.h"
#include <iostream>
using namespace std;
int main(int argc, char ** argv)
{
  Parser parser;
  while(parser.yyparse()!=0)
  ;
}makefile
program:
	flex++ -d -oscanner.cpp scanner.l 
	bison++ -d -hparser.h -o parser.cpp parser.y
	g++ -c parser.cpp
	g++ -c scanner.cpp
	g++ -c test.cpp
	g++ -o test test.o parser.o scanner.oПишет «yylval не объявлено», и это понятно нужно передать эту переменную в yylex. Так вот как это сделать я не знаю. Прошу подсказать, что нужно добавить. Можно просто прислать пример на 0x47@mail.ru. Заранее спасибо.
P.S. Что странно: пример, который идет вместе с bison в папке «/usr/share/doc/bison++/Example» почему-то не компилируется, компиляция останавливается на полуслове.