start -> output block
output -> LMUSTACH OUTPUT VARIABLE RMUSTACH
loop -> loop_start block end_stmt
loop_start -> LMUSTACH LOOP [LPAREN VARIABLE [COMMA VARIABLE] RPAREN] array_accessor [AS VARIABLE] RMUSTACH
end_stmt -> LMUSTACH END RMUSTACH
block -> loop | LMUSTACH accessor RMUSTACH | block anything | anything | import_stmt* block
import_stmt -> LMUSTACH IMPORT RMUSTACH [import_option] end_stmt
import_option -> VARIABLE COLON anything SEMICOLON
array_accessor -> VARIABLE [ [DOT VARIABLE] [array_bracket] ]* [array_slice]
accessor -> VARIABLE [ [array_bracket] [DOT VARIABLE] ]*
dot_variable -> DOT VARIABLE
array_slice -> LBRACKET array_slice_index COMMA array_slice_index RBRACKET
array_bracket -> LBRACKET VARIABLE | NUMBER RBRACKET
array_slice_index ->DOUBLEDOTS | VARIABLE | NUMBER