more reference

This commit is contained in:
dtb 2022-12-10 22:56:17 -05:00
parent 2e9cd20761
commit adacc89143
2 changed files with 110 additions and 0 deletions

View File

@ -12,6 +12,98 @@ the bang language
Public domain. 2022 DTB.
## Glossary
### chart
The listing of the program currently running.
This can be modified during runtime.
### command
A character that indicates what the bang language executor should do next.
### hand
The general-purpose register.
### catch
To set the hand to a value.
### throw
To set a value to the contents of the hand.
## Reference
All operations are one character long.
When an unknown operation is executed the resulting behavior is undefined
(and maliciously so; for example, execution can stop or garbage can be written to the chart).
### `'!'`
No-op. Does nothing.
`' '`, `'\n'`, `'\r'`, `'\t'`, and `'\v'` are all also no-ops
\- keep this in mind when styling code that contains `'?'`!
### `';'`
Denotes a comment.
A comment starts with a semicolon (or `'#'`, for compatibility with shebangs)
and ends with a bang (`'!'`) or line feed (`'\n'`).
### `'%'`
Throws at the current location in the program listing to which chart points.
### `'^'`
Catches the constant `0`.
### `'&'` and `'*'`
`'&'` (ampersand) palms the chart. `'*'` (splat) throws the chart.
The following program rewrites itself during runtime using ampersand and splat:
```
^{?>!&++*<!%&++*<<%&+*<
%&+*<>%&+*<^%<!}
^; zero out hand
{?>; set return point; if hand is non-zero, print hand
!&++*; palm the chart; add 2 to palm; splat the new chart
<!%; write '!' to the new chart position
&++*; palm the chart; add 2 to palm; splat the new chart
<<%; write '<' to the new chart position
&+*; advance the chart one space
<
%; write '\n' to the new chart position
&+*; advance the chart one space
<>%; write '>' to the new chart position
&+*; advance the chart one space
<^%; write '^' to the new chart position
<!; palm '!'
}; return
```
Right before the final `'}'`, the chart is the following:
```
^{!><
>^*<!%&++*<<%&+*<
%&+*<>%&+*<^%<!}
^; zero out hand
{!>; print hand
<
>; palm `'\n'`; print hand
^*; splat zero to chart
The rest of the program isn't executed.
```
## Examples
### true(1)

View File

@ -0,0 +1,18 @@
^{?>!&++*<!%&++*<<%&+*<
%&+*<>%&+*<^%<!}
^; zero out hand
{?>; set return point; if hand is non-zero, print hand
!&++*; palm the chart; add 2 to palm; splat the new chart
<!%; write '!' to the new chart position
&++*; palm the chart; add 2 to palm; splat the new chart
<<%; write '<' to the new chart position
&+*; advance the chart one space
<
%; write '\n' to the new chart position
&+*; advance the chart one space
<>%; write '>' to the new chart position
&+*; advance the chart one space
<^%; write '^' to the new chart position
<!; palm '!'
}; return