summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/public/repl.html
blob: a6c5e7875beabe86b63cb39b35bcba16336c9bbc (plain)
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
<!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 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>&lt;term&gt;</code>) is given by the following rules:</p>
      <dl>
        <dt><code>&lt;symbol&gt;</code></dt>
        <dd>A symbol is a sequence of letters and some symbols ('-', '_', '*', '#', '%', '&', ':', '@', '/')</dd>

        <dt><code>(&lt;term&gt; &lt;term&gt;+)</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 (&lt;symbol&gt;+) &lt;term&gt;)</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 &lt;symbol&gt; &lt;term&gt;)</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="repl.js"></script>
  </body>
</html>