1*cb63e24eSchristos /* Copyright (C) 2021-2024 Free Software Foundation, Inc. 24f645668Schristos Contributed by Oracle. 34f645668Schristos 44f645668Schristos This file is part of GNU Binutils. 54f645668Schristos 64f645668Schristos This program is free software; you can redistribute it and/or modify 74f645668Schristos it under the terms of the GNU General Public License as published by 84f645668Schristos the Free Software Foundation; either version 3, or (at your option) 94f645668Schristos any later version. 104f645668Schristos 114f645668Schristos This program is distributed in the hope that it will be useful, 124f645668Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 134f645668Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 144f645668Schristos GNU General Public License for more details. 154f645668Schristos 164f645668Schristos You should have received a copy of the GNU General Public License 174f645668Schristos along with this program; if not, write to the Free Software 184f645668Schristos Foundation, 51 Franklin Street - Fifth Floor, Boston, 194f645668Schristos MA 02110-1301, USA. */ 204f645668Schristos 214f645668Schristos #ifndef _QLPARSER_H 224f645668Schristos #define _QLPARSER_H 234f645668Schristos 244f645668Schristos #include <sstream> 254f645668Schristos #include <istream> 264f645668Schristos #include <iostream> 274f645668Schristos #include "Expression.h" 284f645668Schristos 294f645668Schristos /* This class contains parser inputs (a string, if non-NULL: if NULL, use cin), 304f645668Schristos and outputs (obtained via operator(), which resets the output 314f645668Schristos expression). The destructor deletes the returned expression to allow 324f645668Schristos exception throws on syntax error to clean up properly. */ 334f645668Schristos 344f645668Schristos namespace QL 354f645668Schristos { 364f645668Schristos struct Result 374f645668Schristos { 384f645668Schristos std::stringstream streamify; 394f645668Schristos public: 404f645668Schristos std::istream in; 414f645668Schristos Expression *out; 424f645668Schristos ResultResult434f645668Schristos Result () : in (std::cin.rdbuf ()), out (NULL) { } ResultResult444f645668Schristos Result (const char *instr) : streamify (std::string (instr)), 454f645668Schristos in (streamify.rdbuf ()), out (NULL) { } 464f645668Schristos operatorResult474f645668Schristos Expression *operator() () 484f645668Schristos { 494f645668Schristos Expression *o = out; 504f645668Schristos out = NULL; 514f645668Schristos return o; 524f645668Schristos } 534f645668Schristos ~ResultResult544f645668Schristos ~Result () 554f645668Schristos { 564f645668Schristos delete out; 574f645668Schristos } 584f645668Schristos }; 594f645668Schristos }; 604f645668Schristos 614f645668Schristos #endif /* _QLPARSER_H */ 62