https://github.com/haskell-github-trust/smt2-parser
Parse smt2 in Haskell
https://github.com/haskell-github-trust/smt2-parser
haskell parser smt smt-lib smt2
Last synced: about 1 month ago
JSON representation
Parse smt2 in Haskell
- Host: GitHub
- URL: https://github.com/haskell-github-trust/smt2-parser
- Owner: haskell-github-trust
- License: bsd-3-clause
- Created: 2020-02-14T05:01:10.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-10-08T09:29:11.000Z (over 2 years ago)
- Last Synced: 2024-03-15T05:22:07.399Z (about 1 year ago)
- Topics: haskell, parser, smt, smt-lib, smt2
- Language: Haskell
- Homepage: https://hackage.haskell.org/package/smt2-parser
- Size: 78.1 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- License: LICENSE
Awesome Lists containing this project
README
# smt2-parser
A Haskell parser for [SMT-LIB](http://smtlib.cs.uiowa.edu/) version 2.6 [^1]. [The language reference](http://smtlib.cs.uiowa.edu/language.shtml) is available in [pdf](http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf).
## Usage
Run a parser with an input string:
```hs
-- parseStringEof :: Parser a -> T.Text -> Either ParseError aparseStringEof numeral "0" === Right ("0" :: Numeral)
parseStringEof identifier "(_ BitVec 32)" === Right (IdIndexed ("BitVec" :: Symbol) (fromList [IxNumeral "32"]))
```Run a parser from a file string, possibly leading and trailing by spaces and having comments
```hs
-- parseFileMsg :: Parser a -> T.Text -> Either T.Text a
>>> parseFileMsg script (T.pack "(set-logic HORN)\n\n(declare-fun |sum$unknown:2|\n ( Int Int ) Bool\n)\n(assert\n (forall ( (|$V-reftype:10| Int) (|$alpha-1:n| Int) (|$knormal:1| Int) (|$knormal:2| Int) (|$knormal:3| Int) )\n (=>\n ( and (= |$knormal:2| (- |$alpha-1:n| 1)) (= (not (= 0 |$knormal:1|)) (<= |$alpha-1:n| 0)) (= |$V-reftype:10| (+ |$alpha-1:n| |$knormal:3|)) (not (not (= 0 |$knormal:1|))) (|sum$unknown:2| |$knormal:3| |$knormal:2|) true )\n (|sum$unknown:2| |$V-reftype:10| |$alpha-1:n|)\n )\n )\n)(check-sat)")Right [ SetLogic "HORN"
, DeclareFun "sum$unknown:2" [SortSymbol (IdSymbol "Int"),...] (SortSymbol (IdSymbol "Bool"))
, Assert (TermForall ...)
, CheckSat
]
```## Known Issue
`removeComment` may cause performance issue. Use `parseCommentFreeFileMsg` on a preprocessed comment-free file instead.
[^1]: Barrett, Clarke, Pascal Fontaine and Cesare Tinelli. The SMT-LIB Standard: Version 2.6. Technical Report BarFT-RR-17, Department of Computer Science, The University of Iowa, 2017. Available at www.SMT-LIB.org