No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Current status of the build, including test scripts: Build Status


The software is tested with GHC-8.0.1. Newer versions are likely to work too. Installation works via cabal, which comes as part of both stack and the ghc-package.

To install amperspiegel in your path, run (in the directory of this README):

cabal install

Alternatively, you can try a manual install using ghc --make amperspiegel but this will likely complain about missing packages, which you can install via cabal install. For a list of required packages, check 'build-depends:' in the amperspiegel.cabal file. The packages base, containers and text are probably already installed with ghc.


I put a GPL-3 license to get you started on using and modifying this software. For the license see the file LICENSE. Since I am the only contributor, you can ask me for a less restrictive license (like BSD / Apache 2.0) if you need one. I'll probably be open to giving it to you.


Here is a script you may try after installing amperspiegel in your path

For an overview of all switches, use: amperspiegel -h

After having done all this, send me an email (or a message in github, or ..) and tell me what you think. I like knowing who is trying out my software. Don't be shy: I'll remove this notice once I'm getting too many such emails.

Implementation notes

A state assigns a population to each variable. Initially, these are the assignments:

  • "parser" gets assigned a population describing the built-in parser. It contains the relations "recogniser", "continuation", "choice" and "nonTerminal" to describe the parser, plus a set of rules that is applied after parsing, using "rule", "eFst", "eSnd", "pre", "post", and some other relations.
  • "asParser" gets assigned a set of rules to change a ampersand-style script that talks about "concepts", "declaration", "relation" etc into a parser.
  • "switches" gets assigned the switches passed to amperspiegel.
  • possibly some others, use -list to see them

All other variables get assigned the empty population by default, the following in particular:

  • "population", which stands for the population we're working on currently Consequently, most switches get "population" as default argument

The switch -i uses "parser" as a parser to parse each of its arguments Next, the union over the resulting list of populations is taken To this population, "parser" is then applied as a rule-set This result is put in "population" (Resulting in a state)

The switch -asParser applies "asParser" on "population", then filters it. Consequently, "population" only contains stuff relevant for parser and rules. It then copies "population" to "parser".

Switches -count and -show displays stuff about a variable.

Future work

See the issues page.