diff options
Diffstat (limited to 'project/templates/grasp.xhtml')
-rw-r--r-- | project/templates/grasp.xhtml | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/project/templates/grasp.xhtml b/project/templates/grasp.xhtml new file mode 100644 index 0000000..5afc4b7 --- /dev/null +++ b/project/templates/grasp.xhtml @@ -0,0 +1,76 @@ + +{%- extends "base.xhtml" -%} + + + +{%- block title -%}Grasp Interpreter{%- endblock -%} + + + +{%- block content %} +<h4>Grasp Interpreter</h4> + +<p>Git repository: <a href="/cgi-bin/cgit.cgi/esoteric">Link</a></p> + +<h5>1/1/2017</h5> + +<p>Like Lisp, the esoteric programming language <a href="http://esolangs.org/wiki/Grasp" +class="external">Grasp</a> is a homoiconic language that exclusively uses a single datatype. Except +instead of lists, it uses directed graphs.</p> + +<p>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.</p> + +<div class="figure"> + <img src="/img/grasp_helloworld.png" + alt="Hello World in Grasp" + height="176" + width="268" /> + <div class="figcaption">Hello World in Grasp</div> +</div> + +<p>In the <a href="https://github.com/fis/grajsp/wiki/Grasp-specification" class="external">current +specification</a>, the actions that can be performed are:</p> + +<ul> + <li>Add or delete an edge</li> + <li>Change the value of a node</li> + <li>Add, subtract, multiply, divide, or modulo node values</li> + <li>Call and return from functions, which take the form of subgraphs with named entry points + </li> + <li>Read and write from arbitrary file handles</li> + <li>Push, pop and pick a section of nodes arranged to act as a stack</li> +</ul> + +<p>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.</p> + +<p>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 <a href="http://www.graphviz.org/doc/info/lang.html" class="external">DOT graph +description language</a> for the file format, to enable a text format as well as relatively easy +conversion to a graph image.</p> + +<p>The above example is recorded as follows:</p> +<div class="precontain"> +<code> +digraph { + 1 [label="puts"] + 2 [label="grasp:main"] + 3 [label="Hello world!"] + + 1 -> 2 [label="name"] + 1 -> 3 [label="in"] +} +</code> +</div> + +<p>If a format that more readily converts to a comprehensible graph image is found, a parser for it +may be added.</p> +{% endblock -%} + + |