Elevator
Elevator is an esoteric programming language made by User:Mipinggfxgbtftybfhfyhfn to program elevators.
Concepts
Elevators
A program in Elevator can control many elevators. To do this its nesesary to specify a elevator block. In the program each elevator has its own name which is used to comunicate elevators. Each elevator has a group of actions it can do. Them main action is executed when the progrem starts. All other actions are called as they were commands.
Syntax
There are to types of syntax: commands and blocks. They syntax is the following:
- Command
name params
- Block
name params some code end name
Commands
| Name | Syntax | Use |
|---|---|---|
| up | up N | Go up N floors. |
| down | down N | Go down N floors. |
| floor | floor N | Go to the Nth floor. |
| getFloor | getFloor | The user selects a floor from the elevator keyboard and it goes to that floor. |
| outFloor | outFloor | Shows the floor number. |
Blocks
| Name | Syntax | Use |
|---|---|---|
| elevator |
elevator name Some code end elevator |
Creates a controller for a elevator. |
| action |
action name params... Some code end action |
Creates a action for a elevator to do. It can only be used in a elevator block. |
| with |
with elevator Some code end with |
Lets control an elevator from other one. |
| above |
above floor Some code end aboveFloor |
Execs it's code if the current elevator is above the specified floor. |
| below |
below floor Some code end below |
Execs it's code if the current elevator is below the specified floor. |
| in |
in floor Some code end in |
Execs it's code if the current elevator is in the specified floor. |
| until |
until floor Some code end until |
Execs it's code until the elevator is in the specified floor. |
Special syntaxes
| Name | Syntax | Use |
|---|---|---|
| Comment | ; | Ignores the rest of the line. |
| Actual floor | ! | Returns the floor of the elevator of the actual action. That means that if it's value is 42 and you use a with block, it will be still 42. |
Implementation
At the start of the program the interpreter runs each main action in order. Any action can run any other action. If both of them belong to the same elevator, then they can executed as they were any other command. Else a with block is required.
The commands in the actions are executed in order and instantly (unless the elevator needs to change floor, then the program will wait until it has stopped).
If Elevator is being interpreted in an emulator, then there are infinite floors and the floor changes instantly. Also in this case, outFloor prints the floor number and getFloor, instead of reading input from the elevator keyboard, reads a user input as an integer.
Examples
Cat and normal elevator
elevator Normal
action main
getFloor
outFloor
end action
end elevator
Calculator elevator
; There are three elevators: one for the first number and the result, one for the operation and one for the second number
elevator A
action main
getFloor ; Get the first number
end action
end elevator
elevator Op
action main
getFloor ; Get the operation
end action
end elevator
elevator B
action main
getFloor ; Get the second number
; Check the operation
with Op
in 1
; add
with A
up !
outFloor
end with
end in
in 2
; Substract
with A
down !
outFloor
end with
end in
end with
end action
end elevator
Cleaner Version
; In this version there is instead a controller, a math, and a storage elevator
elevator Controller
; When the program starts:
action main
; Get the first number
getFloor
; Store it into the storage
with Storage
store !
end with
; Get the operation
getFloor
; If its one, then get the second number an add it to the storage
in 1
with Math
getFloor
addToStorage
end with
end in
; If its 2 substract it to the storage
in 2
with Math
getFloor
substractToStorage
end with
end in
; Print the result
with Storage
outFloor
end with
end action
end elevator
elevator Storage
action store val
floor val
end action
end elevator
elevator Math
action addToStorage
with Storage
up !
end with
end action
action substractToStorage
with Storage
down !
end with
end action
end elevator
Truth elevator
elevator TruthElevator
action main
getFloor
; If the input is 0, then the floor is also 0 so the program just outputs the floor
in 0
outFloor
end in
; If the input is 1 the floor is 1 so the program just outputs it infinitely
in 1
until 2 ; Because the floor never changes, it will never be 2 and the loop wont end
outFloor
end until
end in
end action
end elevator
Hello Elevator
; This program goes to the floors corresponding to the values of the ascii characters that conform the word "Elevator"
elevator Elevator
action main
show 69
show 108
show 101
show 108
show 118
show 97
show 116
show 111
show 114
end action
; Action for showing numbers
action show num
floor num
outFloor
end action
end elevator