1 /** 2 * 3 * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU) 4 * info_at_agrum_dot_org 5 * 6 * This library is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this library. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 22 #ifndef DSLREADER_H 23 #define DSLREADER_H 24 25 #include <agrum/BN/IBayesNet.h> 26 #include <agrum/BN/io/BNReader.h> 27 #include <agrum/agrum.h> 28 #include <iostream> 29 #include <string> 30 31 #ifndef DOXYGEN_SHOULD_SKIP_THIS 32 // including coco-generated PARSER and SCANNER 33 34 # include <agrum/BN/io/DSL/cocoR/Parser.h> 35 #endif // DOXYGEN_SHOULD_SKIP_THIS 36 37 namespace gum { 38 /* =========================================================================*/ 39 /* === READERS === */ 40 /* =========================================================================*/ 41 /** 42 * @class DSLReader 43 * @headerfile DSLReader.h <agrum/BN/io/DSL/DSLReader.h> 44 * @ingroup bn_io 45 * @brief Pure virtual class for reading a BN from a file. 46 * 47 * Every class used to read the content of a Bayesian network from a stream, 48 * or a file must be a subclass of DSLReader. 49 */ 50 template < typename GUM_SCALAR > 51 class DSLReader: public BNReader< GUM_SCALAR > { 52 public: 53 /** 54 * Constructor 55 * A reader is defined for reading a defined file. Hence the 2 args of the 56 * constructor. 57 * Note that the BN has to be built outside the reader. There is no 58 * delegation to 59 * create/destroy 60 * the BN from inside the reader. 61 */ 62 DSLReader(BayesNet< GUM_SCALAR >* bn, const std::string& filename); 63 64 /** 65 * Default destructor. 66 */ 67 ~DSLReader(); 68 69 /// Direct access to DSL scanner (mandatory for listener connection) 70 /// @throws IOError if file not exists 71 DSL::Scanner& scanner(); 72 73 /// name of readen file 74 const std::string& streamName() const; 75 76 /// accessor to trace function (just write the number of parser line) 77 bool trace() const; 78 void trace(bool b); 79 80 /// parse. 81 /// @return the number of detected errors 82 /// @throws IOError if file not exists 83 Size proceed() final; 84 85 /// @{ 86 /// publishing Errors API 87 88 /// # of errors 89 Size errors(); 90 /// # of errors 91 Size warnings(); 92 93 /// line of ith error or warning 94 Idx errLine(Idx i); 95 /// col of ith error or warning 96 Idx errCol(Idx i); 97 /// type of ith error or warning 98 bool errIsError(Idx i); 99 /// message of ith error or warning 100 std::string errMsg(Idx i); 101 102 /// send on std::cerr the list of errorswith contents 103 void showElegantErrors(std::ostream& o = std::cerr); 104 105 /// send on std::cerr the list of errors or warnings with contents 106 void showElegantErrorsAndWarnings(std::ostream& o = std::cerr); 107 108 /// send on std::cerr the list of errors or warnings 109 void showErrorsAndWarnings(std::ostream& o = std::cerr); 110 111 /// send on std::cerr the number of errors and the number of warnings 112 void showErrorCounts(std::ostream& o = std::cerr); 113 /// @} 114 115 protected: 116 BayesNet< GUM_SCALAR >* _bn_; 117 BayesNetFactory< GUM_SCALAR >* _factory_; 118 DSL::Scanner* _scanner_; 119 DSL::Parser* _parser_; 120 121 std::string _streamName_; 122 bool _traceScanning_; 123 bool _parseDone_; 124 125 // a boolean to throw the ioerror not in the constructor but in the 126 // proceed() 127 bool _ioerror_; 128 }; 129 130 131 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 132 extern template class DSLReader< double >; 133 #endif 134 135 } /* namespace gum */ 136 137 #include "DSLReader_tpl.h" 138 139 #endif // DSLREADER_H 140