Skip to content

Automatically deriving boilerplate to parse expressions and handle the runtime execution of reduction relation—typically, but not limited to, an evaluation strategy of the lambda calculus.

License

Notifications You must be signed in to change notification settings

MaicoLeberle/AbstractMachines

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Abstract machines

A simple and unified way for rewriting theory practitioners to quickly implement abstract machines for their rewriting systems. This includes the capabilities to define their own data types for syntax and, with that, the intended reduction relation.

Typical examples of rewriting systems include the different evaluation strategies from the lambda calculus, with their differentiated operational semantics as well as their relatively similar yet distinct syntaxes. This library provides a re-usable derivation mechanism for their respective boilerplate code, thus saving programmers the trouble to re-implement common rewriting-theoretical parts during implementation and comparison of different systems.

Within the examples directory, there is a series of use cases showcasing how to define the syntax and operational semantics using the library. In each of them, the bulk of the evaluation strategy is defined in the src/Types.hs modules, whereas src/Main.hs simply provides a generic interface for running the corresponding abstract machine.

About

Automatically deriving boilerplate to parse expressions and handle the runtime execution of reduction relation—typically, but not limited to, an evaluation strategy of the lambda calculus.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published