MKBL-LN

From Esolang
Jump to: navigation, search

MKBL-LN is a language created by Sgeo. It stands for MetaKit Based Language - Lowlevel Numerical. It was thus named because Sgeo is planning on other MKBL languages that will be better than this one. This language is a work-in-progress.

Note that this documentation will be worked on..

Time is incremented each step at the end.


Textual representation of a program that prints !:

order[0,"main","outgoing"]
outgoing[0,"main",33,"stdout"]


time[time:I,branch:S,subtime:I]

Keeps track of the time. Should not be specified in the initial program, but needs to exist

Only one row at a time is permitted to exist. If there are no rows in the table, it is implied that it is:

time[0,"main",0]

The subtime is probably best explained by example:

  1. time is currently: time[0,"main",0]
  2. <order table is loaded and processed, let's assume that it is order[0,"main","reqin,outgoing"]
  3. time is currently: time[0,"main",1] #Replaces the original row
  4. <reqin is processed>
  5. time is currently: time[0,"main",2]
  6. <outgoing is processed>
  7. time is currently: time[1,"main",0]


nextime[time:I,branch:S,nextime:I,nextbranch:S]

Specifies at (time,branch) where to go next. This is how all ifs etc. must be done

memory[yaddr:I,xaddr:I,value:I]

Memory is 2 dimensional, allowing for things like arrays yaddr represents the row of memory, and xaddr represents the position in that row yaddr can be any integer -1 or higher yaddr -1 is a special read-only row intended for keeping track of time In this documentation, a special notation will be used:

MEM[2][1,2,3,4,5]

actually means:

memory[2,0,1]
memory[2,1,2]
memory[2,2,3]
memory[2,3,4]
memory[2,4,5]


incoming[time:I,branch:S,id:I,value:I,source:S]

time is at what step the value was received, source indicates what table caused it to come (e.g. 'reqin') id is there in case multiple things come in at the same time and branch.

outgoing[time:I,branch:S,value:I,dest:S]

time is at what step the line is to be processed, value is what will be output, and dest is where it's going.

reqin[time:I,branch:S,type:S,source:S]

Will request input to occur at specified time. and source details where it should come from, e.g, stdin, "~/somefile" for *NIX, or "C:\Somefile".

tomem[time:I,branch:S,addr:I,table:S,field:S,fieldpos:S]

If the field is a string, fieldpos specified where in the string it happens. If a nullbit is moved to a fieldpos, the rest of the field is cleared.

frommem[time:I,branch:S,addr:I,table:S,field:S,fieldpos:S]
order[time:I,branch:S,tables:S]

specifies the order that the tables are evaluated in. memory, incoming, and order are never evauated. If an order isn't given for a time and branch, the last one given is used

Example:

order[0,"main","reqin,frommem,tomem,outgoing"]