Aeon
Aeon is a Turing-complete more-flexible esoteric language designed by User:Cptx032 in April of 2014. It is based on FALSE and brainfuck.
Overview
Aeon works with two lists: one for string values and other for function values. The functions available are fixed. You can't write, in a script, another function. The default compiler has 5 basic functions (which can increase if you embed the interpreter in your application):
- 0: print: prints the current value
- 1: println: prints the current value and puts \n char in the end of line
- 2: input: gets terminal entry and saves that value in the current position
- 3: run: interprets the current value like a aeon script.
- 4: read: read the content of file path in current value and saves your value in the previous position
The only chars available are ., +, -, %, v, ^, >, <, {, =, |, [, ], ( and #. Any other chars are ignored.
Functions
You should use those chars to move in the function list:
- v: moves down in the list
- ^: moves up in the list
Its like an vertical list. To run the current function use '.' char.
Variables
The variables are in a horizontal list:
- >: moves right in the list
- <: moves left in the list
Others commands:
- +: tries add +1
- -: tries add -1
- %: saves the rest of line in current position
Flow control
Aeon has an if-greater-than, an if-less-than, an if-equal-to, an if-different-of and a while loop flow controls. The 'if' flow control starts with the '{' char. To test if the value of current position is greater than the last value, you can type: '{]'. To test if the value of current position is less than last value, you can type: '{['. If you want know if the current value is equal to last value, you can type '{=', and different '{|'. If the operation returns true the rest of line is interpreted, if not, the line is broken. The while loop works in the same way: if the current value is different of '0' then the rest of line is interpreted.
Error handling
Commands like +, -, {[, {[ can throw errors if the current value can't be casted to float or integer. Aeon hasn't any kind of error handling [although you can do that if you embed the language]. So, be careful.
Embedding the language
c++
To embed aon in c++ you need of the "aeon.cpp" file:
#include "aeon.cpp" int main(){ AeonInterpreter *i = new AeonInterpreter(); std::string script = "++---->>><"; // example std::vector<std::string> script_lines; script_lines.push_back(script); AeonError::AeonError er = i->run(lines); if(er == AeonError::SYNTAX_ERROR){ std::cout << "OPS" << std::endl; } return 0; }
Compile
To compile type:
g++ <yourfile> -O3 -o <out>
Examples
Hello World
%Hello World .
Simple name program
# 0 : print # 1 : println # 2 : input %Enter your name: v.v.>%Welcome, ^.<^.%Press [ENTER] to continue... v.v.
Simple age program
%In Brazil, you can only drive if you have more than 16 years. . %Enter your age: >%You can drive >%You can't drive v<<.>>>v.^^>%16 {[<<<.>>> {]<<.>> {=<<<.>>>
List of commands
Char | Description |
---|---|
. | Runs the current function [vertical list] |
+ | Tries add +1 to the current value [in the horizontal list] |
- | Tries add -1 to the current value [in the horizontal list] |
% | Saves the rest of line to current position [in the horizontal list] |
v | Moves down [in the vertical list] |
^ | Moves up [in the vertical list] |
> | Moves right [in the horizontal list] |
< | Moves left [in the horizontal list] |
{ | Starts an 'if-statement' |
= | Before '{' means 'if-equal'. The rest of line will be runned if current value is equal to last value. If the last char is not '{' it is ignored. |
| | Before '{' means 'if-different-of'. The rest of line will be runned if current value is different of last value. If the last char is not '{' it is ignored. |
[ | Before '{' means 'if-less-than'. The rest of line will be runned if current value is less than last value. If the last char is not '{' it is ignored. |
] | Before '{' means 'if-greater-than'. The rest of line will be runned if current value is greater than last value. If the last char is not '{' it is ignored. |
( | While the current value is different of '0' the rest of line is runned |
# | The interpretation is interrupted. So, it works like commentary. After this char you can type any others char [including >, < etc.] |