Adding sypet to repo
[Benchmarks_CSolver.git] / sypet-non-incremental / README.md
diff --git a/sypet-non-incremental/README.md b/sypet-non-incremental/README.md
new file mode 100644 (file)
index 0000000..005b587
--- /dev/null
@@ -0,0 +1,66 @@
+```                            
+                            ____     ___      __ 
+                           / __/_ __/ _ \___ / /_
+                          _\ \/ // / ___/ -_) __/
+                         /___/\_, /_/   \__/\__/ 
+                             /___/               
+      
+```
+
+#Component-Based Synthesis for Complex APIs
+
+SyPet is a novel type-directed tool for component-based synthesis. The key 
+novelty of our approach is the use of a compact Petri-net representation to 
+model relationships between methods in an API. Given a target method signature 
+S, our approach performs reachability analysis on the underlying Petri-net model 
+to identify sequences of method calls that could be used to synthesize an 
+implementation of S. The programs synthesized by our algorithm are guaranteed 
+to type check and pass all test cases provided by the user.
+
+
+#Publication
+
+Component-Based Synthesis for Complex APIs. 
+Yu Feng, Ruben Martins, Yuepeng Wang, Isil Dillig, Thomas W. Reps. POPL 2017.
+
+#Disclaimer
+
+The open source version of SyPet is a simplified version of the one that was 
+described in the POPL 2017 paper. In particular, we did not include the 
+optimizations done by pruning or by the objective function (see Appendix D of 
+the extended version of the paper for more details on the impact of those 
+features). Note that, this version is more compact than the original SyPet 
+version and should be easier to extend. 
+
+The open version of SyPet should be extended in the next year with new features. 
+In this version, the user can provide additional information to SyPet using 
+the CONFIG.json file. In particular, the user can specify a set of "blacklist" 
+keywords and all methods that contain those keywords will not be used when 
+constructing the Petri-net. Additionally, the user can also manually specify 
+which methods are polymorphic in the "poly" field. Finally, the user can specify 
+packages that will always be included in the construction of the Petri-net in 
+the "buildinPkg".
+
+NOTE: If you want to compare against the original version of SyPet and reproduce 
+the results from the POPL 2017 paper, we recommend you to use the binary version 
+available at SyPet's webpage: https://fredfeng.github.io/sypet/
+
+#Usage
+
+```
+$ ant
+$ ./run-sypet.sh benchmarks/xml/23/benchmark23.json
+
+
+#Config file (CONFIG.json)
+
+*blacklist: SyPet will not include those methods in the PetriNet
+
+*poly: Specify sub-typing relationship on-demand
+
+*buildinPkg: Build-in packages included by SyPet
+
+#Requirements
+ - JDK 1.7+
+ - ANT
+