help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bison++ problem


From: Grzegorz_Szostak
Subject: bison++ problem
Date: Thu, 4 Jul 2002 11:20:44 +0200

Hello,
I know that this is GNU bison mailling list but bison++ is based on bison ;
-)

So, please help me:
I'm developing script parser and I've got problem with message: parse
error, expecting `$'
It looks like my parser doesn't work - it waits for "dollarsign" which - i
think means - that he expect "end of input (line?)"
How can I make my parser work?

Below is my .yy file:

%define ERROR_VERBOSE
%define VERBOSE
%define DEBUG 1
%define MEMBERS \
yyFlexLexer lexer;
%define LEX_BODY { return lexer.yylex(); }
%define ERROR_BODY { cerr << "error: " << msg << endl; lexer.yyrestart
(&cin); }
%define LSP_NEEDED

%union {
        string *str;
        char c;
}


%token<str> NUMBER
%token<str> VAR
%token<str> VAR_NAME
%token<str> PLUS
%token<str> EQU

%left EQU PLUS

%type<str> expression line def_decl assig operation root

%%

root:   expression { (*$$) = "t"; }
;

expression:   line
;
line:   def_decl
|       assig
|       operation
;

def_decl:    VAR VAR_NAME EQU NUMBER ';' {
        pVars->Define((*$2), (*$1), (void*) $4->c_str() );
        $$ = &((*pVars)[(*$2)].getString());
        delete $1;
        delete $2;
        delete $3;
        delete $4;
        } /* deklaracja i inicjacja */

assig:    VAR_NAME EQU NUMBER ';' {
        (*pVars)[(*$1)] = (*$3);
        delete $1;
        delete $3;
        }   /* przypisanie */
;
operation: VAR_NAME PLUS VAR_NAME ';' {
        (*pVars)[(*$1)] + (*pVars)[(*$3)];
        //$$ = &Vars[string($1)].getString();
        delete $1;
        delete $2;
        delete $3;
        }   /* suma na symbolach */
| VAR_NAME ';' {
        cout << (*pVars)[(*$1)];
        delete $1;
        } /* wypisanie wartosci */
;

%%




reply via email to

[Prev in Thread] Current Thread [Next in Thread]