Blog/Components/Pages/Concat.razor 4.3 K · 136 lines · raw · history

1 @page "/Concat"
2 <PageTitle>Concatenator</PageTitle>
3 <PageScript Src="./Components/Pages/Concat.razor.js"/>
4 <main>
5 <p>A "concatenative language"</p>
6 <form id="form">
7 <textarea id="input" placeholder="1 2 +" rows="5"></textarea>
8 <input type="submit" value="Run program">
9 </form>
10 <Log/>
11
12 <fieldset class="docs">
13 <legend>Predefined operations</legend>
14 <details>
15 <summary>dup</summary>
16 <p>Duplicates the top value on the stack</p>
17 <div class="flex-spread">
18 <span>[1, 2, 3]</span>
19 <span>dup</span>
20 </div>
21 <div class="flex-spread">
22 <span>[1, 1, 2, 3]</span>
23 <span></span>
24 </div>
25 </details>
26
27 <details>
28 <summary>drop</summary>
29 <p>Drops the top value on the stack</p>
30 <div class="flex-spread">
31 <span>[1, 2, 3]</span>
32 <span>drop</span>
33 </div>
34 <div class="flex-spread">
35 <span>[2, 3]</span>
36 <span></span>
37 </div>
38 </details>
39
40 <details>
41 <summary>swap</summary>
42 <p>Swaps the top two values on the stack</p>
43 <div class="flex-spread">
44 <span>[1, 2, 3]</span>
45 <span>swap</span>
46 </div>
47 <div class="flex-spread">
48 <span>[2, 1, 3]</span>
49 <span></span>
50 </div>
51 </details>
52
53 <details>
54 <summary>skip</summary>
55 <p>Skips forward in the program by the amount on the top of the stack.
56 If the value on the top of the stack is 0 or negative,
57 the value is dropped and the program does not skip ahead.
58 </p>
59 <div class="flex-spread">
60 <span>[1, 2, 3]</span>
61 <span>skip drop dup</span>
62 </div>
63 <div class="flex-spread">
64 <span>[2, 3]</span>
65 <span>dup</span>
66 </div>
67 <div class="flex-spread">
68 <span>[2, 2, 3]</span>
69 <span></span>
70 </div>
71 Or
72 <div class="flex-spread">
73 <span>[-1, 2, 3]</span>
74 <span>skip drop dup</span>
75 </div>
76 <div class="flex-spread">
77 <span>[2, 3]</span>
78 <span>drop dup</span>
79 </div>
80 <div class="flex-spread">
81 <span>[3]</span>
82 <span>dup</span>
83 </div>
84 <div class="flex-spread">
85 <span>[3, 3]</span>
86 <span></span>
87 </div>
88 </details>
89
90 <details>
91 <summary>: word ... ;</summary>
92 <p>Creates a new definition.</p>
93 <p>Example: ": double 2 * ;" defines a new word called double. Any subsequent mention of double will
94 replace the word with its definition.</p>
95 <div class="flex-spread">
96 <span>[]</span>
97 <span>: double 2 * ; 3 double</span>
98 </div>
99 <div class="flex-spread">
100 <span>[]</span>
101 <span>3 double</span>
102 </div>
103 <div class="flex-spread">
104 <span>[3]</span>
105 <span>double</span>
106 </div>
107 <div class="flex-spread">
108 <span>[3]</span>
109 <span>2 *</span>
110 </div>
111 <div class="flex-spread">
112 <span>[2, 3]</span>
113 <span>*</span>
114 </div>
115 <div class="flex-spread">
116 <span>[6] &lt;==</span>
117 <span></span>
118 </div>
119 </details>
120 </fieldset>
121 <fieldset class="docs">
122 <legend>Example programs</legend>
123 <details>
124 <summary>Factorial</summary>
125 <NavLink
126 href="/concat?in=FwAgxg9grgdgLgUwE4lQEygBxAJhAZwHcBDbAWhAG4AoUAQlRA2wEYQLJZEV8BrAS2wMAVFWoB2EHWpA">
127 Replace program
128 </NavLink>
129 <pre>
130 : counter dup 2 swap - ;
131 : ! dup 1 - counter skip ! * ;
132 7 !
133 </pre>
134 </details>
135 </fieldset>
136 </main>