2023-12-14 09:08:05 -06:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Top contributors (to current version):
|
2025-01-23 09:54:20 -08:00
|
|
|
# Daniel Larraz, Aina Niemetz, Andrew Reynolds
|
2023-12-14 09:08:05 -06:00
|
|
|
#
|
|
|
|
|
# This file is part of the cvc5 project.
|
|
|
|
|
#
|
2025-01-23 09:54:20 -08:00
|
|
|
# Copyright (c) 2009-2025 by the authors listed in the file AUTHORS
|
2023-12-14 09:08:05 -06:00
|
|
|
# in the top-level source directory and their institutional affiliations.
|
|
|
|
|
# All rights reserved. See the file COPYING in the top-level source
|
|
|
|
|
# directory for licensing information.
|
|
|
|
|
# #############################################################################
|
|
|
|
|
#
|
|
|
|
|
# A simple demonstration of using multiple parsers with the same symbol manager
|
|
|
|
|
# via Python API
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
import cvc5
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-03-14 14:34:58 -07:00
|
|
|
tm = cvc5.TermManager()
|
|
|
|
|
slv = cvc5.Solver(tm)
|
2023-12-14 09:08:05 -06:00
|
|
|
|
2024-06-18 16:21:47 -07:00
|
|
|
sm = cvc5.SymbolManager(tm)
|
2023-12-14 09:08:05 -06:00
|
|
|
|
|
|
|
|
# construct an input parser associated the solver above
|
|
|
|
|
parser = cvc5.InputParser(slv, sm)
|
2024-03-14 14:34:58 -07:00
|
|
|
|
2023-12-14 09:08:05 -06:00
|
|
|
input = """
|
|
|
|
|
(set-logic QF_LIA)
|
|
|
|
|
(declare-fun a () Int)
|
|
|
|
|
(declare-fun b () Int)
|
|
|
|
|
(declare-fun c () Bool)
|
|
|
|
|
"""
|
2024-03-14 14:34:58 -07:00
|
|
|
|
2023-12-15 13:50:57 -06:00
|
|
|
parser.setStringInput(cvc5.InputLanguage.SMT_LIB_2_6, input, "MyInput")
|
2023-12-14 09:08:05 -06:00
|
|
|
|
|
|
|
|
# parse commands until finished
|
|
|
|
|
while True:
|
|
|
|
|
cmd = parser.nextCommand()
|
|
|
|
|
if cmd.isNull():
|
|
|
|
|
break
|
|
|
|
|
print(f"Executing command {cmd}")
|
|
|
|
|
# invoke the command on the solver and the symbol manager, print the result
|
|
|
|
|
print(cmd.invoke(slv, sm), end="")
|
|
|
|
|
|
|
|
|
|
print("Finished parsing commands")
|
|
|
|
|
|
|
|
|
|
# Note that sm now has a,b,c in its symbol table.
|
|
|
|
|
|
|
|
|
|
# Now, construct a new parser with the same symbol manager. We will parse
|
|
|
|
|
#terms with it.
|
|
|
|
|
parser2 = cvc5.InputParser(slv, sm)
|
|
|
|
|
|
|
|
|
|
parser2.setIncrementalStringInput(cvc5.InputLanguage.SMT_LIB_2_6, "MyInput2")
|
|
|
|
|
|
|
|
|
|
input2 = """
|
|
|
|
|
(+ a b)
|
|
|
|
|
(- a 10)
|
|
|
|
|
(>= 0 45)
|
|
|
|
|
(and c c)
|
|
|
|
|
true
|
|
|
|
|
"""
|
|
|
|
|
parser2.appendIncrementalStringInput(input2)
|
|
|
|
|
|
|
|
|
|
t = parser2.nextTerm()
|
|
|
|
|
while not t.isNull():
|
|
|
|
|
print(f"Parsed term: {t}")
|
|
|
|
|
t = parser2.nextTerm()
|
2024-03-14 14:34:58 -07:00
|
|
|
|
2023-12-14 09:08:05 -06:00
|
|
|
print("Finished parsing terms")
|