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 *)