Improved Stack-Based Programming Language
Go to file
2022-04-17 17:40:25 +02:00
bootstrap add callmethod function 2022-04-17 17:40:25 +02:00
.gitignore more gitignore 2022-03-06 16:36:15 +01:00
COPYING Create COPYING 2022-03-06 20:22:50 +01:00
errorstream.isbpl add time functions, fix errorstream.isbpl 2022-03-06 17:39:49 +01:00
file.isbpl first version of java interpreter 2022-03-05 20:55:03 +01:00
helloworld.isbpl add helloworldgen.isbpl to demonstrate streams, fix streams 2022-03-06 18:46:04 +01:00
helloworldgen.isbpl change stream api syntax 2022-03-12 20:05:04 +01:00
iota.isbpl add callmethod function 2022-04-17 17:40:25 +02:00
isbpl.isbpl easier to handle comments for the compiler 2022-02-23 18:07:04 +01:00
LICENSE Create LICENSE 2022-03-06 20:22:20 +01:00
README.md readme update 2022-04-16 01:45:48 +02:00
setup.sh add setup script 2022-03-05 20:57:02 +01:00
std.isbpl add callmethod function 2022-04-17 17:40:25 +02:00
stream.isbpl JIO 2022-04-16 18:44:07 +02:00
time.isbpl add helloworldgen.isbpl to demonstrate streams, fix streams 2022-03-06 18:46:04 +01:00

isbpl

Improved Stack-Based Programming Language

Incomplete, not currently compilable, only interpretable.

Stuff: TudbuT/isbpl-random-stuff


ISBPL is similar to Lisp:

(print (+ 1 (* 1 2)))

is the same as

2 1 * 1 + print

or

( ( ( 2 1 * ) 1 + ) print )

in both languages, this will print 3.

These examples used the print function, which does not exist by default, instead, puts should be used in combination with _string.


Objects, Functions, and Variables in ISBPL

OOP works like this:

  • There are three separate function resolvers:
    • Object
    • Local
    • Global
  • They are executed in the order shown above
  • The object resolver peeks onto the stack, gets the type of the object, and checks for methods on the type, if it finds one, it executes it
  • The local resolver checks for functions defined in the current function, but not in any other function or area
  • The global resolver checks for top-level functions, meaning ones that arent in any other function.
  • Because variables are native functions under the hood, they are also called by the function resolvers
  • Object-local variables are in a Table: Type?->Instance?->ID?->Value

To call a method of an object:

parameter1 parameter2 etc object method

As explained above, methods are resolved separately, and it is therefore not required to define them in any other way.