Arrowey

From Esolang
Jump to navigation Jump to search
This article is not detailed enough and needs to be expanded. Please help us by adding some more information. As this esolang is a work-in-progress there's currently no info to add. More information will later be included as soon as it exists ;)

Description

arrowey is an esolang that can be written in a readable way or in totally unreadable ways. It consists of instructions that can be written in four directions: left, right, up, down. These are connected using the Unicode arrow characters (←↓↑→) (therefore the name).

An example hello world program can look readable like this: out:"Hello world"→end:<> or hard to understand like in this screenshot:

Hard-to-read arrowey hello-world program
Hard-to-read arrowey hello-world program

.

arrowey is an interpreted twodimensional language, meaning the interpreter's "playhead" starts in the top left and goes right until it hits an arrow. It then follows this arrow's direction until the next arrow and so on until it hits an end:<> statement.

Syntax

The "playfield" has to be rectangular (every line has to have the same length, filled up to the right with spaces). The "playhead" of the interpreter starts in the top left and moves initially to the right. If an arrow (←↑↓→) is hit by the "playhead" of the interpreter it will change directions based on the direction of the arrow. The code is read character by character so the instructions need to be spelled in the direction the playhead will be taking. Instructions are separated through the arrows and zero to infinite spaces before and after the arrows. Every character that is not hit by the "playhead" is considered a comment. Instructions can share characters with other instructions and comments by crossing them. Variables are marked by enclosing their name with angle brackets ("<" and ">"). Functions are also variables but to call them their name is written with a colon directly after it and then space-delimited arguments until the end of the instruction. There's a special nameless constant (<>) which corresponds to nothing, like null or the pythonic None. The 2D aspect of arrowey is just a preparsing step. A preparser follows the path and retrieves the one-dimensional actual source code that is then parsed and executed. In script mode (useful for creating and debugging) there is no 2D aspect to the language and every arrow is only interpreted as an instruction separator without changing the execution direction.

Additional stuff

An online arrowey interpreter is in the works on Lampe2020.de. There or on GitHub you can also get the latest LARK syntax definition.