1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Minilang</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/minilang.css" >
<link rel="icon"
type="image/png"
href="/pi.png">
<link href="https://fonts.googleapis.com/css?family=Inconsolata&display=swap" rel="stylesheet">
</head>
<body>
<h1>λ-Calculus Terminal <span id="helptip">?</span></h1>
<div class="edit">
<textarea id="program"></textarea>
<div>
<button id="send">Send</button>
</div>
</div>
<div id="repl">
<div id="session"></div>
<div class="command">
<input id="command" class="disconnected" />
<img class="connect" id="connect" src="images/connect.png" />
</div>
<div id="minilang"></div>
</div>
<div id="help">
<h2>Minilang REPL Help</h2>
<p>This is a read-eval-print loop (REPL) for the Minilang λ-calculus interpreter.</p>
<h3>Connecting to the Interpreter</h3>
<p>Click the <img class="connect" src="images/connect.png" alt="Connect Icon" /> icon to connect to the interpreter. Once connected, the input box border will turn green.</p>
<h3>Entering Commands</h3>
<p>Type your Minilang commands into the input box and press <em>Enter</em> to execute them. The results will be displayed below. Available commands can be found by typing <code>:help</code>, the most important ones being:</p>
<dl>
<dt><code>:help</code></dt>
<dd>Display this help message.</dd>
<dt><code>:clear</code></dt>
<dd>Clear the REPL output and environment. All definitions will be removed.</dd>
<dt><code>:env</code></dt>
<dd>Display the current environment with all defined variables and their values.</dd>
<dt><code>:lang language</code></dt>
<dd>Switch the interpreter to the specified language mode. Supported values are <code>Untyped</code> or <code>Typed</code>.
By default the REPL is interpreting the untyped version.</dd>
</dl>
<h3>Disconnecting</h3>
<p>To disconnect from the interpreter, click the <img class="connect" src="images/connected.png" alt="Disconnect Icon" /> icon. The input box border will turn red.</p>
<h3>Entering Programs</h3>
<p>
The left hand panel is a "terminal" for entering whole programs. Once you're happy with your program you can click on the <em>Send</em>
button, the program will be sent as is to the server and its evaluation result will appear below the command panel.
</p>
<h4>Syntax</h4>
<p>The syntax is based on <a href="https://en.wikipedia.org/wiki/S-expression" target="_blank">s-expressions</a>, e.g. like LISP, Scheme or Clojure. The semi-formal grammar of expressions (or <code><term></code>) is given by the following rules:</p>
<dl>
<dt><code><symbol></code></dt>
<dd>A symbol is a sequence of letters and some symbols ('-', '_', '*', '#', '%', '&', ':', '@', '/')</dd>
<dt><code>(<term> <term>+)</code></dt>
<dd>An <em>application</em> expression: needs at least 2 terms, and terms are applied from left to right.</dd>
<dt><code>(lam (<symbol>+) <term>)</code></dt>
<dd>An <em>abstraction</em> expression (ie. a function definition): needs at least 1 symbol</dd>
</dl>
<p>Beside <em>expressions</em> which are evaluated, one can enter <em>definitions</em> which augment the current <em>environment</em> and can be referred to by later expressions or definitions</p>
<dl>
<dt><code>(def <symbol> <term>)</code></dt>
<dd>Binds <code>symbol</code> to <code>term</code> in the current environment</dd>
</dl>
<h3>Troubleshooting</h3>
<ul>
<li>If you encounter connection issues, ensure that your internet connection is stable.</li>
<li>If commands are not executing, try reconnecting to the interpreter.</li>
</ul>
</div>
<script src="help.js"></script>
<script src="repl.js"></script>
</body>
</html>
|