Ozone

From Esolang

Jump to: navigation, search

Ozone is an stack-based language created by User:Set. Program flow in Ozone is controlled by the mechanism of spawning new stacks, copying them, and executing.

Contents

[edit] Language Overview

An Ozone program is a set of characters that will be pushed onto stack 0 and set to execute when the program is run. All stacks initialize to (0), and when the last item on a stack is popped, it will go back to (0).

Parentheses are used around the lists. For example (100,52,8) would be a valid list. For ease of programming, lists are pushed onto the stack beginning with the last item, so that you don't have to write everything backwards. Within a list, angles are used around sets of characters. So (1,<Hello World>,7) would be a valid list.

Command Description
s* Spawn new stack numbered *
v*() or *2 Push list onto stack *. If () is given, use that, if *2 is given, use that stack as the list.
e* Execute stack *. This will interpret the top item as a command, then pop it and continue all the way through the stack.
c* Displays the top of stack * as an ASCII character
n* Display top of stack * as a number
p* Pop item at top of stack *
u* Increment stack *
d* Decrement stack *
+* Pops stack * and adds
-* Pops stack * and subtracts
** Pops stack * and multiplies
/* Pops stack * and integer divides
i* Accept a character of input and direct to stack *
b* Break (stop executing and clear stack) if stack * is <= 0

[n*] can be substituted in anything. It will be interpreted as the value of stack *. Stacks can push lists onto themselves, where they will appear right after the command that did that.

[edit] Examples

These examples may have bugs in them, since there isn't an interpreter to test them with.

[edit] Hello, World!

This will output "Hello, World!"

Easily-readable w/comments:

(s1v1(<Hello, World!>)       |Push the string "Hello, World!" onto stack 1
s2v2(<                       |Begin pushing a list onto stack 2
  c1p1                       |Print stack 1 and pop
  b1v02>)                    |Break if 0, push stack 2 onto stack 0, end list
v02)                         |Push stack 2 onto stack 0

[edit] Fibonacci

This will output the Fibonacci sequence.

Standard:

(s1v1(1)n1n1s2v21v21s3v3(<+2n2v12+1n1v21v03>)v03)

Easily-readable w/comments:

(s1v1(1)n1n1                 |Push 1 onto stack 1 and print twice
s2v21v21                     |Push stack 1 onto stack 2 twice
s3v3                         |Begin pushing a list onto stack 3
  (<+2n2                     |Add stack 2 and display
  v12                        |Push stack 2 onto stack 1
  +1n1                       |Add stack 1 and display
  v21                        |Push stack 1 onto stack 2
  v03>)                      |Push stack 3 onto stack 0, end list
v03)                         |Push stack 3 onto stack 0

[edit] Everything else

The author thinks this language is Turing-complete, but has no current proof. Currently, there is no interpreter, since the author does not know how to implement one.

Personal tools