((?)?)?

From Esolang
Jump to: navigation, search

((?)?)? is an esoteric programing language made by User:Mipinggfxgbtftybfhfyhfn.

Memory Structure

In ((?)?)? there are three loctaions to store data:

  • The bit (a bit used for all the operations are made)
  • The stack (a group of bits used to store more complex data)
  • The variable system (a group of bits, each asigned to its own name, used for saving data in a structured way)

All the data is stored as a bit.

Concepts

Groups

A group is a code block wich is executed with its own bit (initialized at 0). After the group ends, its bit is stored into the main bit, or if the croup is nested, the bit is stored in the bit of the outer group. A program can be coinsedered a group were all the instructions are executed.

Nor operator

The only operator in ((?)?)? is nor. Nor is an universal logical operator, in other words, you can simulate any other logical gate by using just it:

Normal Using just nor
not a false nor a
a or b false nor (a nor b)
a and b (a nor false) nor (b nor false)
a xor b ((a nor false) nor (b nor false)) nor (a nor b)

Sintax

Symbols

Symbol Name Function
 ? nor Creates two new groups (one for its left and one for its right). Execs them and sets the outer bit to the result of "noring" the group bits.
( start group Creates a group.
) end group Deletes the current gruop and stors its bit in the outer bit.
 ! toggle Deprecated. If the bit is 1, it changes it 0 and viseversa.
 :name set name Sets the variable name to the current bit value. The name can only contain one character.
 ;name get name Sets the current bit to the variable name value.
@ push Pushes the current bit value into the stack.
# pop Pops the top value of the stack and sets the current bit to it.
_ has elements Sets the current bit to 1 if the stack has elements, 0 otherwise.
[ start while Goes to the next ].
] end while If the bit is 1, returns the caracter after the previous [.
= out num Asumes the stack is a binary number and prints it in the decimal system.
~ out char Asumes the stack is an ascii code in binary and prints its corresponding character.
- out bit Prints the current bit.
$ input num Gets a number from user input. Translates it to binary and pushes its bits into the stack
 % input char Gets a character from user input. Gets its ascii code in binary and pushes its bits into the stack.
& input bit Gets a bit (t/f, y/n, 1/0) from the user and sets the current bit to it.
/ break Prints "\n".

Any non-valid symbol is a comment

Examples

Cat

With a number:

$=

With a character:

%~

With a bit:

&-

Half adder

Get two bits
&:a &:b
Add them
((;a?)?(;b?):c)?(;a?;b):s
Print the result
;c- ;s-
End the line
/

Code snipets

set the bit to 0
()
set the bit to 1
(?)
not a
(;a?)
a or b
((;a?;b)?)
a and b
(;a?)?(;b?)
a xor b
((;a?)?(;b?))?(;a?;b)
switch the two first stack elements
#:1 #:2 ;1@ ;2@
do something without changing the bit
using the stack
@ your code here #
using the variable sistem
:i your code here ;i
do something until stack is empty
_[:i your code here ;i]