Skip to content
Sign upLog in
← Back to Community

Stekovaya Tutorial Part1

Profile icon
TheForArkLD

Stekovaya Tutorial

Stekovaya is a stack based language. It is very light weight but also very versatile.

Hello World

Let's start with a simple hello world program.

index.stk

STR Hello World! END MSG

Congratulations! You've made a major step in understanding Stekovaya.
In this simple example, we've added a string (Hello World) and terminated with END. We've also popped it off of the stack and printed it to the console using MSG.

Comments

Let's make our example easier to read by adding some comments. REM is a key word reserved for adding comments.

index.stk

STR Hello World! END MSG REM Push Hello World! to the stack and pop it off to print to the console.

If REM is a hard keyword to memorize for comments, think of it like REMembering something to write down.

Numbers

We can also work with numbers. Simply typing numbers will push them to the stack.

index.stk

1 2 7 3

Booleans

Booleans are basically true or false. In Stekovaya, a true is a 1 and a false is a 0. We'll review this concept more when we look at comparison operators.

Variables

Variables are an easy way to store values. There are two types of variables in Stekovaya: constant and changeable. Both variable types can be declared with DEF.
Let's start with a changeable variable. As the name suggests, the values of these variables can be changed.

index.stk

STR message END STR Hello World END DEF

What are we doing here? First we define an identifier called "message", which is terminated with END. We assign "message" a value of "Hello World" in a similar fashion, ending it with DEF. We can use this variable later on like so:

index.stk

STR message END STR Hello World END DEF message MSG REM we define a "message" variable and then print it to the console.

There are also constant variables. The values of these variables cannot be changed. In order to define a constant variable, simply add an underscore _ to the beginning of the variable name.

index.stk

STR _message END STR Hello World END DEF REM the value of _message cannot be changed.

The Stack

So far, we've reviewed the MSG command, which prints the top of the stack to the console. We can also print the entire stack to the console using STK, which can be useful for debugging.

index.stk

1 2 7 3 STK REM outputs STACK<4> 1 2 7 3 to the console

The other method to print to the console is DMSG. This method is special in that it does not alter the stack, it simply logs the top of the stack (MSG logs and pops the top of the stack). DMSG is used in the exact same way as MSG.

index.stk

1 DMSG REM outputs 1 to the console without popping the stack

Operators

Stekovaya does not use the common operators you might expect, as it revolves around a purely stack based programming language. Let's start by learning how to perform simple math.
We can add, subtract, multiply, and divide fairly inuitively using ADD, SUB, MUL, and DIV.

index.stk

5 2 ADD MSG

In this example, we simply add the two numbers at the top of the stack and log it to the console. As mentioned earlier, the rest can be done in the same way.
For clarity:

index.stk

5 2 SUB MSG REM outputs 3 to the console 5 2 MUL MSG REM outputs 10 to the console 5 2 DIV MSG REM outputs 2.5 to the console

Other Math

We can also calculate other mathematical operations with some useful functions. The first is POW, which raises the second value of the stack to the first stack power.

index.stk

2 5 POW MSG REM outputs 32 to the console

We are effectively raising 2 to the 5th power (2 ^ 5). Like POW, we can also take roots of values using ROT. This is also the same as taking a value to the 1/n (where n is a real number).

index.stk

2 4 ROT MSG REM outputs 2 to the console

Here, we take √4, or 4 to the 1/2 power.

Comparisons

In other programming languages, you might expect to see > or <=. Stekovaya uses key words to perform similar actions.

index.stk

5 2 LSS MSG REM equivalent of 5 < 2 REM outputs 0 for false

LSS is used as the less than comparison operator. In order to log the result, we use MSG. The others are fairly self explanatory, so let's go over them quickly.

index.stk

5 2 LEQ REM equivalent of 5 <= 2, checks if 5 is less than or equal to 2 5 2 GTR REM equivalent of 5 > 2, checks if 5 is greater than 2 5 2 GEQ REM equivalent of 5 >= 2, checks if 5 is greater than or equal to 2 5 2 EQU REM equivalent of 5 == 2, checks if 5 is equal to 2 5 2 NEQ REM equivalent of 5 != 2, checks if 5 is not equal to 2

Remember, 0 is false and 1 is true. To log the results of comparisons, you can use MSG or DMSG

Loops

There is only one kind of loop in Stekovaya, the FOR loop. Initializing a loop is easy. Simple start a loop with FOR and end it with EFOR For instance, the example below infinitely logs "Hello World!" to the stack.

index.stk

FOR STR Hello World! END MSG EFOR

In order to terminate or break from a loop, you must use BRK.

Do Nothing

While it seems like useless filler, you can also choose not to do anything with the stack.

index.stk

EMP REM nothing happens

Exiting Program

You can exit a Stekovaya program with either EXT or ERX. EXT exits the program with a status of 0, where as ERX exits with a status of 1.

index.stk

EXT REM exit status 0 ERX REM technically this won't run, but if it did it would exit with status 1.

Thanks

@AdCharity
for write markdown!

Voters
Profile icon
programmeruser
Profile icon
topkekmabel
Profile icon
Navinor
Profile icon
SixBeeps
Profile icon
zplusfour
Profile icon
mkhoi
Profile icon
EpicGamer007
Profile icon
HahaYes
Profile icon
Highwayman
Profile icon
Michael18may
Comments
hotnewtop
Profile icon
SixBeeps

Ayo my 1 2 7 3 made it in ^^

Profile icon
TheForArkLD

@SixBeeps
yeah ^^

Profile icon
HahaYes

yay!

Profile icon
TheForArkLD
Profile icon
EpicGamer007

Wow Cool! This seems so complicated though lol. I am really dumb :p

Profile icon
TheForArkLD

@AbhayBhat
oooo thanks! but you aren't dumb lol

Profile icon
EpicGamer007

@TheForArkLD
, Lol thanks. Also what language did you make this language in. And where can we code in it. Is there like a program we can install to run it on our computer or is it in an online compiler?

Profile icon
TheForArkLD

@AbhayBhat
written by C#, you can run it in your computer.
but you cant run it in your computer now...
( but you can run it in replit, yay )

Profile icon
EpicGamer007

@TheForArkLD
, Huh really, how?

Profile icon
TheForArkLD

@AbhayBhat
access to it for run stekovaya in replit : here

Profile icon
EpicGamer007

@TheForArkLD
, ok thx

Profile icon
DynamicSquid

Oh cool! It seems like a lot of people are making languages now! I'm also making one, but it's nothing special. I just want it to have the basic functions. You did a cool job with your stack operations!

Profile icon
TheForArkLD

@DynamicSquid
Thanks :)

Profile icon
TheForArkLD

hey, EMP isn't useless lol.
im using EMP for control stkvy.exe.
example : STR Hello world! END
in program :

  1. program found STR, starting EMP mode
  2. pushing Hello to array and replacing to EMP
  3. pushing world! to array and replacing to EMP
  4. program found END, ending EMP mode
  5. push concatted array to stack -> Hello world!