diff --git a/README.md b/README.md index 2169e614d..3092c06be 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,5 @@ # Silver -Silver is an attribute grammar-based language for the modular development of composable language extensions. - -See [About Silver](#about-silver) below for more info. - -See [The Silver Install Guide](http://melt.cs.umn.edu/silver/install-guide) for detailed information on how to get Silver set up. - -## Prerequisites - -Silver requires: Java 7+, Ant, Bash, and wget. It can run on Linux, MacOS, and Windows Subsystem for Linux (WSL) in Windows 10. - -Silver is written in Silver, which means after checkout, you need initial jars. You can download these with a helpful script: - -``` -./update -``` - -This will `git pull` to update, download jars, and clear any files generated by older versions of Silver. -A one-stop-shop for updating after the initial clone. - - -# About Silver - Silver is an extensible attribute grammar system that support many modern extensions to Knuth's original design. These include higher-order attributes, reference attributes, forwarding, aspects, @@ -29,54 +7,63 @@ and collections attributes. Its type system support parametric polymorphism. Silver is distributed with Copper, a parser and context-aware scanner generator. -Please note that Silver is a research project and while we do endeavor -to create useful and quality software there may be bugs and missing -functionality. Consult with us if you wish to use Silver for -"serious" work. We otherwise make no guarantees about the features or -performance of Silver. +It is designed for the modular development of composable language +extensions, with language features and analyses to support this. + +## Using silver + +Silver requires Java 8, Ant, Bash, and wget. It can run on Linux, MacOS, and Windows Subsystem for Linux (WSL) in Windows 10. + +See [The Silver Install Guide](http://melt.cs.umn.edu/silver/install-guide) +for detailed information on how to get Silver set up. -* Ted Kaminski (tedinski@cs.umn.edu) +Silver is written in Silver, which means after cloning the GitHub +repository you still need the executable Java jar files. You can download +these by running the ``update`` script in this repository. This will do a +`git pull` to update, then download jars, and clear any files generated +by older versions of Silver. A one-stop-shop for updating after the +initial clone. + +## Authors and contributors +Silver is currently developed and maintained by + +* Lucas Kramer (krame505@umn.edu) * Eric Van Wyk (evw@cs.umn.edu) -Minnesota Extensible Language Tools (MELT) Group -Department of Computer Science and Engineering -University of Minnesota -http://melt.cs.umn.edu +Past contributors include Ted Kaminski (tedinski@cs.umn.edu), Derek Bodin, Lijesh Krishnan, and Jimin Gao. +It is developed by the Minnesota Extensible Language Tools (MELT) Group +(http://melt.cs.umn.edu) at the Department of Computer Science and Engineering (https://cs.umn.edu) at the University of Minnesota (https://umn.edu). -## The Silver web site -Downloads, documentation, and related papers are available on the -Silver web site: +## Websites and repositories -http://melt.cs.umn.edu/silver +Software downloads, documentation, and related papers are available on the +Melt group web site at http://melt.cs.umn.edu/. Information about Copper and sample language frameworks developed with -Silver can be found on the MELT Group web site: - +Silver can be found on the MELT Group web site at http://melt.cs.umn.edu +Actively-developed versions of this software are available on GitHub at +https://github.com/melt-umn/silver. -## Acknowledgements - -Silver is currently developed and maintained by +Archival versions of this software are permanently available on the Data +Repository of the University of Minnesota at https://doi.org/10.13020/D6QX07. -* Ted Kaminski (tedinski@cs.umn.edu) -* Lucas Kramer (krame505@cs.umn.edu) -* Eric Van Wyk (evw@cs.umn.edu) +Other software and artifacts are also archived there and can be +reached from this persistent link: http://hdl.handle.net/11299/206558. -Past contributors include Derek Bodin, Lijesh Krishnan, and Jimin Gao. +## Acknowledgements We are very grateful to the National Science Foundation, the McKnight Foundation, DARPA, the University of Minnesota, and IBM for funding different aspects of our research and the development of Silver and -Copper. +Copper. ## Licensing - Silver and Copper are distributed under the GNU Lesser General Public License. See the files COPYING and COPYING.LESSER for details of these licenses. More information can be found at http://www.gnu.org/licenses/. - diff --git a/grammars/silver/rewrite/Strategy.sv b/grammars/silver/rewrite/Strategy.sv index b2b532eb0..3514ddd27 100644 --- a/grammars/silver/rewrite/Strategy.sv +++ b/grammars/silver/rewrite/Strategy.sv @@ -196,6 +196,48 @@ top::Strategy ::= s::Strategy forwards to s <* all(topDown(s)); } +abstract production downUp +top::Strategy ::= s1::Strategy s2::Strategy +{ + forwards to s1 <* all(downUp(s1, s2)) <* s2; +} + +abstract production allBottomUp +top::Strategy ::= s::Strategy +{ + forwards to all(allBottomUp(s)) <+ s; +} + +abstract production allTopDown +top::Strategy ::= s::Strategy +{ + forwards to s <+ all(allTopDown(s)); +} + +abstract production allDownUp +top::Strategy ::= s1::Strategy s2::Strategy +{ + forwards to s1 <+ all(allDownUp(s1, s2)) <+ s2; +} + +abstract production someBottomUp +top::Strategy ::= s::Strategy +{ + forwards to some(someBottomUp(s)) <+ s; +} + +abstract production someTopDown +top::Strategy ::= s::Strategy +{ + forwards to s <+ some(someTopDown(s)); +} + +abstract production someDownUp +top::Strategy ::= s1::Strategy s2::Strategy +{ + forwards to s1 <+ some(someDownUp(s1, s2)) <+ s2; +} + abstract production onceBottomUp top::Strategy ::= s::Strategy { @@ -208,6 +250,12 @@ top::Strategy ::= s::Strategy forwards to s <+ one(onceTopDown(s)); } +abstract production onceDownUp +top::Strategy ::= s1::Strategy s2::Strategy +{ + forwards to s1 <+ one(onceDownUp(s1, s2)) <+ s2; +} + abstract production innermost top::Strategy ::= s::Strategy {