GCC Code Coverage Report
Directory: . Exec Total Coverage
File: src/parser/parser_builder.cpp Lines: 73 75 97.3 %
Date: 2021-08-20 Branches: 25 41 61.0 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Christopher L. Conway, Morgan Deters, Andrew Reynolds
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8
 * in the top-level source directory and their institutional affiliations.
9
 * All rights reserved.  See the file COPYING in the top-level source
10
 * directory for licensing information.
11
 * ****************************************************************************
12
 *
13
 * A builder for parsers.
14
 */
15
16
// This must be included first.
17
#include "parser/parser_builder.h"
18
19
#include <string>
20
21
#include "api/cpp/cvc5.h"
22
#include "base/check.h"
23
#include "cvc/cvc.h"
24
#include "options/base_options.h"
25
#include "options/options.h"
26
#include "options/parser_options.h"
27
#include "parser/antlr_input.h"
28
#include "parser/input.h"
29
#include "parser/parser.h"
30
#include "smt2/smt2.h"
31
#include "tptp/tptp.h"
32
33
namespace cvc5 {
34
namespace parser {
35
36
244
ParserBuilder::ParserBuilder(api::Solver* solver, SymbolManager* sm)
37
244
    : d_solver(solver), d_symman(sm)
38
{
39
244
  init(solver, sm);
40
244
}
41
42
6158
ParserBuilder::ParserBuilder(api::Solver* solver,
43
                             SymbolManager* sm,
44
6158
                             const Options& options)
45
6158
    : d_solver(solver), d_symman(sm)
46
{
47
6158
  init(solver, sm);
48
6158
  withOptions(options);
49
6158
}
50
51
6402
void ParserBuilder::init(api::Solver* solver, SymbolManager* sm)
52
{
53
6402
  d_lang = language::input::LANG_AUTO;
54
6402
  d_solver = solver;
55
6402
  d_symman = sm;
56
6402
  d_checksEnabled = true;
57
6402
  d_strictMode = false;
58
6402
  d_canIncludeFile = true;
59
6402
  d_parseOnly = false;
60
6402
  d_logicIsForced = false;
61
6402
  d_forcedLogic = "";
62
6402
}
63
64
6402
Parser* ParserBuilder::build()
65
{
66
6402
  Parser* parser = NULL;
67
6402
  switch (d_lang)
68
  {
69
195
    case language::input::LANG_SYGUS_V2:
70
195
      parser = new Smt2(d_solver, d_symman, d_strictMode, d_parseOnly);
71
195
      break;
72
41
    case language::input::LANG_TPTP:
73
41
      parser = new Tptp(d_solver, d_symman, d_strictMode, d_parseOnly);
74
41
      break;
75
6166
    default:
76
6166
      if (language::isInputLang_smt2(d_lang))
77
      {
78
5229
        parser = new Smt2(d_solver, d_symman, d_strictMode, d_parseOnly);
79
      }
80
      else
81
      {
82
937
        parser = new Cvc(d_solver, d_symman, d_strictMode, d_parseOnly);
83
      }
84
6166
      break;
85
  }
86
87
6402
  if( d_checksEnabled ) {
88
6402
    parser->enableChecks();
89
  } else {
90
    parser->disableChecks();
91
  }
92
93
6402
  if( d_canIncludeFile ) {
94
6402
    parser->allowIncludeFile();
95
  } else {
96
    parser->disallowIncludeFile();
97
  }
98
99
6402
  if( d_logicIsForced ) {
100
9
    parser->forceLogic(d_forcedLogic);
101
  }
102
103
6402
  return parser;
104
}
105
106
6366
ParserBuilder& ParserBuilder::withChecks(bool flag) {
107
6366
  d_checksEnabled = flag;
108
6366
  return *this;
109
}
110
111
6610
ParserBuilder& ParserBuilder::withInputLanguage(InputLanguage lang) {
112
6610
  d_lang = lang;
113
6610
  return *this;
114
}
115
116
6366
ParserBuilder& ParserBuilder::withParseOnly(bool flag) {
117
6366
  d_parseOnly = flag;
118
6366
  return *this;
119
}
120
121
6366
ParserBuilder& ParserBuilder::withOptions(const Options& opts)
122
{
123
6366
  ParserBuilder& retval = *this;
124
12732
  retval = retval.withInputLanguage(opts.base.inputLanguage)
125
6366
               .withChecks(opts.parser.semanticChecks)
126
6366
               .withStrictMode(opts.parser.strictParsing)
127
6366
               .withParseOnly(opts.base.parseOnly)
128
6366
               .withIncludeFile(opts.parser.filesystemAccess);
129
6366
  if (opts.parser.forceLogicStringWasSetByUser)
130
  {
131
18
    LogicInfo tmp(opts.parser.forceLogicString);
132
9
    retval = retval.withForcedLogic(tmp.getLogicString());
133
  }
134
6366
  return retval;
135
}
136
137
6468
ParserBuilder& ParserBuilder::withStrictMode(bool flag) {
138
6468
  d_strictMode = flag;
139
6468
  return *this;
140
}
141
142
6366
ParserBuilder& ParserBuilder::withIncludeFile(bool flag) {
143
6366
  d_canIncludeFile = flag;
144
6366
  return *this;
145
}
146
147
9
ParserBuilder& ParserBuilder::withForcedLogic(const std::string& logic)
148
{
149
9
  d_logicIsForced = true;
150
9
  d_forcedLogic = logic;
151
9
  return *this;
152
}
153
154
}  // namespace parser
155
29343
}  // namespace cvc5