xref: /netbsd-src/external/gpl3/binutils/dist/gprofng/src/QLParser.h (revision cb63e24e8d6aae7ddac1859a9015f48b1d8bd90e)
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