FILO

From Esolang
Jump to navigation Jump to search

FILO is a stack-based programming language. A FILO program consists of a set of function definitions.

Syntax

 program = definitions ;
 
 definitions = definition, { definitions } ;
 
 definition = identifier, "=", expression, "." ;
 
 expression = "@" | "0" | expression, "*", expression | expression, "+", expression | expression, "-", expression | identifier, expression, "," ;

Identifiers are consecutive sequences of non-whitespace characters, excluding @, 0, *, +, -, ,, =, and .. Whitespace separates identifiers and is otherwise ignored.

*, +, and - are right-associative and have equal precedence.

A , immediately preceding a . may be omitted.

Comments begin with == and extend to the end of the line.

Expressions

Argument

 @

The argument of the function.

Empty

 0

An empty stack.

Push

 x * y

A new stack with x pushed onto y.

Top

 x + y

The top element of x unless x is empty, then y.

Pop

 x - y

The stack consisting of x with its top element removed unless x is empty, then y.

Apply

 f x

The result of applying function f to x.

Input/Output Encoding

How input and output are encoded is implementation-defined.

One possibility is for the argument and result to be interpreted as stacks of bits, where the each element of the stack is interpreted as 0 if it is empty, and interpreted as 1 if it is not empty, and the argument being constructed from the bits of the input, and the result being interpreted as the bits of the output.

Examples

These examples use the input/output encoding defined by the implementation below.

cat

 cat=@.

Hello world

 hello=h0*0.
 h=0*0*0*@*0*0*@*0 * @*0*@*0*0*@*@*0 * 0*0*@*@*0*@*@*0 * 0*0*@*@*0*@*@*0
  *@*@*@*@*0*@*@*0 * 0*0*0*0*0*@*0*0 * @*@*@*0*@*@*@*0 * @*@*@*@*0*@*@*0
  *0*@*0*0*@*@*@*0 * 0*0*@*@*0*@*@*0 * 0*0*@*0*0*@*@*0 * @*0*0*0*0*@*0*0
  *0*@*0*@*0*0*0*0.

References