Binodu

binodu is an esoteric programming language created by asiekierka in August 2011. It operates on the concept of very simple nodes, which can do simple logic operations or trigger different nodes.
==Syntax==
===List of commands===
<...> denotes required elements. [...] denotes optional elements.
 [Automatic] [Output] Node a
 Default <True|False>
 Compare [Store] <And|Or>
 [Not] b
 Action <False|True>
 Fire b
 Store c
===Explanation===
* Node a: Defines a node named "a". Can be Automatic (runs at every tick, where a new tick is made after all Automatic nodes have finished) and/or Output (its state is output after every tick, in format "a: True". Can also be OutputOnChange, which means the state is only printed out when it changes).
* Compare [Store] And/Or: Nodes for which values to check. Can be And (all have to result in true) or Or (any can result in true). [Store] means that by default, the result of the compare is stored. The default result is True. The defualt Compare is And.
* [Not] b: Check if node b is true (or false with Not)
* Action <False|True>: Defines a list of actions to perform when the result of Compare is true (or false). If not specified, this Action will run always. Multiple Actions can be defined.
* Fire b: Make Node b execute synchronously (Node a's execution pauses until Node b is fully finished).
* Store c: Store the value of node c as your own. (The default value is false).
* Default [True|False]: Defines the default value. Only read during interpreter initialization, otherwise ignored.
NOTE: Multiple pairs of compares/actions are allowed in one node. You can also nest those pairs inside of Actions.
===Different commands===
* Copy [Previous] d: Copy the value of node d as your own.
* Output [b]: Outputs the current state of itself (or a different node) to stdio (when 8 bits are output, it prints an ASCII character).
* Stop: Stop the node from automatically executing. (If the node is fired off again, automatic execution is restored.)
===Special nodes===
WARNING: Nodes marked with [o] do not have to be implemented by an interpreter for it to support binodu.
* True, False: Self-explanatory.
* [o] InputA-Z,0-9,...: Is true if the key A, B, etc... is pressed.
==Examples==
===Hello, World!===
This Hello, World! is considerably optimized, however, it could probably be optimized further
 Automatic Node Hey
 	Compare
 	Action
 		Output False
 		Output True
 		Fire TwoFalse
 		Output True
 		Output False
 		Fire TwoFalse
 		Fire Six
 		Output False
 		Output True
 		Output False
 		Output True
 		Fire L
 		Fire L
 		Fire Six
 		Fire TwoTrue
 		Fire TwoTrue
 		Fire Two
 		Fire TwoTrue
 		Fire TwoFalse
 		Fire Two
 		Fire TwoFalse
 		Fire TwoFalse
 		Fire Seven
 		Fire Seven
 		Fire Six
 		Fire TwoTrue
 		Fire TwoTrue
 		Fire Seven
 		Fire Two
 		Fire L
 		Fire Six
 		Output False
 		Output True
 		Fire TwoFalse
 		Fire Two
 		Fire TwoFalse
 		Output False
 		Output True
 		Stop
 Node Six
 	Compare
 	Action
 		Output False
 		Fire TwoTrue
 		Output False
 Node L
 	Compare
 	Action
 		Fire Six
 		Fire TwoTrue
 		Fire TwoFalse
 Node Two
 	Compare
 	Action
 		Fire TwoFalse
 		Output True
 		Output False
 Node Seven
 	Compare
 	Action
 		Output False
 		Output True
 		Fire TwoTrue
 Node TwoTrue
 	Compare
 	Action
 		Output True
 		Output True
 Node TwoFalse
 	Compare
 	Action
 		Output False
 		Output False
=== XOR Gate ===
Press A to toggle input 1, Z to toggle input 2. X to perform a XOR operation.
 Automatic OutputOnChange Node ToggleA
 Compare
 InputA
 Action True
 Compare
 ToggleA
 Action True
 Store False
 Action False
 Store True
 Automatic OutputOnChange Node ToggleZ
 Compare
 InputZ
 Action True
 Compare
 ToggleZ
 Action True
 Store False
 Action False
 Store True
 Automatic OutputOnChange Node XOR1
 Compare
 InputX
 Action True
 Store False
 Compare And
 ToggleA
 ToggleZ
 Action False
 Compare And
 Not ToggleA
 Not ToggleZ
 Action False
 Store True
=== 4-bit Linear Feedback Shift Register ===
Triggered with pressing L.
 # This is an LFSR.
 # Try to figure out how it works.
 Node LFSRxor
 Compare
 Action
 Store False
 Compare And
 LFSRbit1
 LFSRbit2
 Action False
 Compare And
 Not LFSRbit1
 Not LFSRbit2
 Action False
 Store True
 Automatic Node LFSRbit1
 Compare
 InputL
 Action True
 Fire LFSRxor
 Store LFSRbit2
 Fire LFSRbit2
 Output
 Output LFSRbit2
 Output LFSRbit3
 Output LFSRbit4
 Node LFSRbit2
 Compare
 Action
 Store LFSRbit3
 Fire LFSRbit3
 Node LFSRbit3
 Default True
 Compare
 Action
 Store LFSRbit4
 Fire LFSRbit4
 Node LFSRbit4
 Compare
 Action
 Store LFSRxor
=== 99 bottles of beer ===
 Node CaSetDef
 Compare
 Action
 Store True
 Fire Ca2
 Fire Ca3
 Store False
 Node Ca1
 Default True
 Compare
 Ca1
 Action True
 Store False
 Action False
 Store True
 Fire CaSetDef
 Node Ca2
 Compare
 CaSetDef
 Action True
 Store False
 Action False
 Compare
 Ca2
 Action True
 Store False
 Action False
 Store True
 Fire Ca1
 Node Ca3
 Compare
 CaSetDef
 Action True
 Store False
 Action False
 Compare
 Ca3
 Action True
 Store False
 Action False
 Store True
 Fire Ca2
 Node Ca4
 Default True
 Compare
 Ca4
 Action True
 Store False
 Action False
 Store True
 Fire Ca3
 Node CbSetDef
 Compare
 Action
 Store True
 Fire Cb2
 Fire Cb3
 Store False
 Node Cb1
 Default True
 Compare
 Cb1
 Action True
 Store False
 Action False
 Store True
 Fire CbSetDef
 Fire Ca4
 Node Cb2
 Compare
 CbSetDef
 Action True
 Store False
 Action False
 Compare
 Cb2
 Action True
 Store False
 Action False
 Store True
 Fire Cb1
 Node Cb3
 Compare
 CbSetDef
 Action True
 Store False
 Action False
 Compare
 Cb3
 Action True
 Store False
 Action False
 Store True
 Fire Cb2
 Node Cb4
 Default True
 Compare
 Cb4
 Action True
 Store False
 Action False
 Store True
 Fire Cb3
 Node PrepDigit
 Compare
 Action
 Fire TwoFalse
 Fire TwoTrue
 Node OutputDigitA
 Compare
 Action
 Fire PrepDigit
 Output Ca1
 Output Ca2
 Output Ca3
 Output Ca4
 Node OutputDigitB
 Compare
 Action
 Fire PrepDigit
 Output Cb1
 Output Cb2
 Output Cb3
 Output Cb4
 Node Newline
 Compare
 Action
 Fire TwoFalse
 Fire Two
 Fire TrueFalse
 Node OutputDigits
 Compare Or
 Ca1
 Ca2
 Ca3
 Ca4
 Action True
 Fire OutputDigitA
 Action
 Fire OutputDigitB
 Node KeepOnRunning
 Default True
 Compare Or
 Ca1
 Ca2
 Ca3
 Ca4
 Cb1
 Cb2
 Cb3
 Cb4
 Action False
 Store False
 Node TrueFalse
 Compare
 Action
 Output True
 Output False
 Node TwoFalse
 Compare
 Action
 Output False
 Output False
 Node TwoTrue
 Compare
 Action
 Output True
 Output True
 Node Two
 Compare
 Action
 Fire TwoFalse
 Fire TrueFalse
 Node space
 Compare
 Action
 Fire Two
 Fire TwoFalse
 Fire TwoFalse
 Node lowerB
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Fire Two
 Node lowerO
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Fire TwoTrue
 Fire TwoTrue
 Node upperT
 Compare
 Action
 Output False
 Fire TrueFalse
 Fire TrueFalse
 Output True
 Fire TwoFalse
 Node lowerT
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TrueFalse
 Output True
 Fire TwoFalse
 Node lowerL
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Fire TwoTrue
 Fire TwoFalse
 Node lowerE
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire Two
 Output True
 Node lowerS
 Compare
 Action
 Output False
 Fire TwoTrue
 Output True
 Fire TwoFalse
 Fire TwoTrue
 Node lower,
 Compare
 Action
 Fire Two
 Fire TwoTrue
 Fire TwoFalse
 Node lower.
 Compare
 Action
 Fire Two
 Fire TwoTrue
 Fire TrueFalse
 Node lowerF
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TwoFalse
 Fire TwoTrue
 Output False
 Node lowerR
 Compare
 Action
 Output False
 Fire TwoTrue
 Output True 
 Fire Two
 Node lowerP
 Compare
 Action
 Output False
 Fire TwoTrue
 Output True 
 Fire TwoFalse
 Fire TwoFalse
 Node lowerN
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Fire TwoTrue
 Fire TrueFalse
 Node lowerH
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Output True
 Fire TwoFalse
 Output False
 Node lowerI
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Output True
 Fire TwoFalse
 Output True
 Node lowerK
 Compare
 Action
 Output False
 Fire TwoTrue
 Output False
 Fire TrueFalse
 Fire TwoTrue
 Node lowerA
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TwoFalse
 Fire TwoFalse
 Output True
 Node lowerU
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TrueFalse
 Fire TrueFalse
 Output True
 Node lowerW
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TrueFalse
 Fire TwoTrue
 Output True
 Node lowerD
 Compare
 Action
 Output False
 Fire TwoTrue
 Fire TwoFalse
 Output True
 Fire TwoFalse
 Node BottlesOfBeer
 Compare
 Action
 Fire lowerB
 Fire lowerO
 Fire lowerT
 Fire lowerT
 Fire lowerL
 Fire lowerE
 Fire lowerS
 Fire space
 Fire lowerO
 Fire lowerF
 Fire space
 Fire lowerB
 Fire lowerE
 Fire lowerE
 Fire lowerR
 Node OnTheWall
 Compare
 Action
 Fire lowerO
 Fire lowerN
 Fire space
 Fire lowerT
 Fire lowerH
 Fire lowerE
 Fire space
 Fire lowerW
 Fire lowerA
 Fire lowerL
 Fire lowerL
 Node TakeOneDown
 Compare
 Action
 Fire upperT
 Fire lowerA
 Fire lowerK
 Fire lowerE
 Fire space
 Fire lowerO
 Fire lowerN
 Fire lowerE
 Fire space
 Fire lowerD
 Fire lowerO
 Fire lowerW
 Fire lowerN
 Fire space
 Fire lowerA
 Fire lowerN
 Fire lowerD
 Fire space
 Fire lowerP
 Fire lowerA
 Fire lowerS
 Fire lowerS
 Fire space
 Fire lowerI
 Fire lowerT
 Fire space
 Fire lowerA
 Fire lowerR
 Fire lowerO
 Fire lowerU
 Fire lowerN
 Fire lowerD
 Fire lower, 
 Automatic Node Bottles
 Compare
 KeepOnRunning
 Action True
 Fire OutputDigits
 Fire space
 Fire BottlesOfBeer
 Fire space
 Fire OnTheWall
 Fire lower,
 Fire space
 Fire OutputDigits
 Fire space
 Fire BottlesOfBeer
 Fire lower.
 Fire Newline
 Fire TakeOneDown
 Fire space
 Fire Cb4
 Fire KeepOnRunning
 Fire OutputDigits
 Fire space
 Fire BottlesOfBeer
 Fire space
 Fire OnTheWall
 Fire lower.
 Fire Newline
 Action False
 Stop
== Implementations ==
asiekierka's Java implementation (v3)
Category:Languages
Category:2011
Category:Implemented