/* Copyright (c) <2009> * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely */ // very simple sample LR(1) grammar with conflicts %union { class dUserVariable: public string { dUserVariable () :string("") { } dUserVariable (Token token, const char* const text) :m_token(token), m_data (text) { } Token m_token; }; } %token id %start E1 %left '+' '-' %left '*' '/' %% E1 : E {printf ("%s\n", $1.m_data.c_str());} ; E : E '+' E {$$.m_data = $1.m_data + " + " + $3.m_data;} // | E '-' E {$$.m_data = $1.m_data + " + " + $3.m_data;} | E '*' E {$$.m_data = $1.m_data + " * " + $3.m_data;} // | E '/' E {$$.m_data = $1.m_data + " * " + $3.m_data;} | '(' E ')' {$$ = $2;} | id {$$ = $1;} ; %%