Trml
Trml is a term-rewriting matrioshka language discovered by User:Orby in May of 2020.
Purpose
Trml is used to describe the syntax and semantics of term-rewriting languages. It provides a formal language in which a term-rewriting language can be described. Many esoteric programming languages may be described as term-rewriting languages, such as Underload, Unlambda, and Clementine.
Description
A Trml description is divided into statements. There are two types of statements. Term statements describe the structure of a term. Rule statements describe rewrite rules. Rule statements contain a colon to delineate between the pattern to be matched and the pattern to which it is rewritten. Term statements do not contain colons. Each statement is terminated by a semicolon. Term meta-variables are referenced by one or more characters contained within parentheses. All white space in a Trml description is ignored. Rewrite rules are applied from left to right and from first appearing to last appearing, deterministically.
Term statements
The following term statements declare the characters k and s as terms.
k; s;
The following term statement uses the meta-variables (a) and (b) to state for all terms (a) and (b), `(a)(b) is also term.
`(a)(b);
Notice the character ` has no special meaning in Trml. We could use any character here, but we choose ` because it is commonly used for application. This means that the following strings are terms
`sk ``skk `s`kk
among many others. This is distinct from the statement
`(a)(a)
which would require the term (a) to appear twice identically.
Rule statements
The rule statement
``k(a)(b):(a);
says to rewrite ``k followed by terms (a) and (b) to the term (a). For example, the expression ``ksk would be rewritten to s. This is how the K combinator works in SK calculus. We could express the S combinator of SK calculus as
```s(a)(b)(c):``(a)(c)`(b)(c);
In that case, the expression ```sskk would be rewritten to ``sk`kk. Notice we can distinguish between term statements and rule statements by the presence of a colon.
Complete example
The SK calculus could be described in Trml as
s;k;`(a)(b);``k(a)(b):(a);```s(a)(b)(c):``(a)(c)`(b)(c);
Matrioshka language
Trml is a matrioshka language. That is, it is possible to program in the object language described by a Trml definition. The use of the $ character denotes the end of the meta-description and the beginning of the object language program. We could express the SK calculus program ```skkk as
s;k;`(a)(b);``k(a)(b):(a);```s(a)(b)(c):``(a)(c)`(b)(c);$```skkk
and the interpreter would output
k
See also
- Thue is a matrioshka language that uses a non-deterministic string-rewriting paradigm.