MAWP is a stack-based, esoteric programming language written in 2020. Here is the list of current availible commands:
        
            
                | Symbol | Meaning | 
            
                | 0-9 | Any subsequent numbers from 0 to 9 will be pushed as one multi-digit number. | 
            
                | " | Any characters between a pair of " will get pushed to stack as a string. | 
            
                | + | Pops two values off of stack. If at least one of the values is a string, pushes a string consisting of two concatenated values. Else, pushes sum of values. | 
            
                | - | Pops two values off of stack. If one of the top two values is a string, pushes values and a 0. Else, pushes difference of values. | 
            
                | * | Pops two values off of stack. If both of two top values of stack is string, push a 0. Else, if only one of values is a string, pushes the string repeated n times, where n is the other value. Else, push two values multiplied. | 
            
                | $ | Pops two values off of stack. If one of the top two values is a string, pushes values and a 0. Else, push result of second value divided by the top. | 
            
                | % | Pops two values off of stack. If one of the top two values is a string, pushes values and a 0. Else, pushes result of second value modulo top value. | 
            
                | ` | Pops top of stack. | 
            
                | MAWP | M,A,W,P are now 4 global variables. If the previous character before one of the variables was =, then assigns top of stack to the corresponding variable. Else, pushes the variable to stack. | 
            
                | ! | Duplicates top of stack. | 
            
                | : | Prints top of stack without newline, removing it. | 
            
                | ; | If top of stack is a string, output string as sequence of ASCII codes. Else, output the corresponding ASCII character. | 
            
                | . | Terminates program | 
            
                | [ | Start of loop. jumps to its ] if top of stack equals to 0 | 
            
                | ] | End of loop. If top of stack doesn't equal to 0, then moves back to start of loop. | 
            
                | ( | Start of inverted [] loop. Jumps to its ) if top of stack doesn't equal to 0 | 
            
                | ) | End of inverted [] loop. Jumps to its ( if top of stack equals to 0 | 
            
                | < | Long conditional. If top of stack doesn't equal to 0, jumps to its > | 
            
                | > | End of long conditional | 
            
                | _ | Pushes length of stack | 
            
                | ? | Short conditional. If top of stack doesn't equal to 0, skips next operator. | 
            
                | | | Pushes whole input byte by byte by its ASCII value | 
            
                | ~ | Reverses the stack | 
            
                | { | Long inverted conditional. If top of stack equals to 0, jumps to its } | 
            
                | } | End of long inverted conditional | 
            
                | @ | Pushes whole input byte by byte. If character is an integer, then push that integer. Else push a 0 | 
            
                | / | Cycles stack clockwise | 
            
                | \ | Cycles stack anticlockwise |