{%- extends "base_plain.xhtml" -%} {%- block title -%}Grasp Interpreter{%- endblock -%} {%- block footer -%}{{ plain_footer ("grasp.xhtml") }}{%- endblock -%} {%- block content %}
Git repository: Link
Like Lisp, the esoteric programming language Grasp is a homoiconic language that exclusively uses a single datatype. Except instead of lists, it uses directed graphs.
A Grasp program is initialised with instruction pointers to those nodes in the graph that have a "name" edge to a node with the value "grasp:main". The nodes at each instruction pointer are evaluated and the pointer then updated by following an available "next" edge. This continues until all instruction pointers have no more "next" edges to follow.
In the current specification, the actions that can be performed are:
The execution of a node may be skipped by having "cond" edges pointing to either zero values or non-numeric values. Also, due to the way instruction pointers update and the way several instructions are defined, there is a measure of non-determinism that can be introduced depending on what edges are available.
The language seemed like an interesting enough idea, but unfortunately nobody had done anything with it, and there was only a specification. This has now been fixed. The interpreter currently uses a subset of the DOT graph description language for the file format, to enable a text format as well as relatively easy conversion to a graph image.
The above example is recorded as follows:
digraph {
1 [label="puts"]
2 [label="grasp:main"]
3 [label="Hello world!"]
1 -> 2 [label="name"]
1 -> 3 [label="in"]
}
If a format that more readily converts to a comprehensible graph image is found, a parser for it may be added.
{% endblock -%}