start = statement_list | {} statement_list = statement statement_list statement = command | assignment command = '%' identifier opt_string_or_block_list '\n' opt_string_or_block_list = string_or_block_list | {} string_or_block_list = string_or_block string_or_block_list string_or_block = string | block block = '%{' start '}%' assignment = identifier '=' string '\n'