Elevator

Category:Languages Category:Thematic Category:2019 
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
Category:Unimplemented