program          ::= statement* (* A program is a collection of zero or more statements *)

statement        ::= increment | decrement | moveRight | moveLeft | loop | output | input

loop             ::= loopStart statement* loopEnd (* Loop construct: Executes statements inside the loop until the value in the current memory cell is zero *)

increment        ::= '+'                (* Increment the value in the current memory cell *)
decrement        ::= '-'                (* Decrement the value in the current memory cell *)
moveRight        ::= '>'                (* Move the current memory pointer to the right *)
moveLeft         ::= '<'                (* Move the current memory pointer to the left *)
loopStart        ::= '['                (* Loop Start: Start executing statements inside the loop until the value in the current memory cell is zero *)
loopEnd          ::= ']'                (* Loop End: Jump back to the loop start if the value in the current memory cell is not zero and continue otherwise *)
output           ::= '.'                (* Output the value in the current memory cell as an ASCII character *)
input            ::= ','                (* Read a character from the input and store its ASCII value in the current memory cell *)
