Package names; Helpers letter = ['a'..'z']; digit = ['0'..'9']; blanks = (10 | 13 | 32); Tokens identifier = letter (letter|digit)* ; number = digit+ ; string_literal = ('"' (letter|digit|blanks)* '"' ) ; dot = '.' ; tick = ''' ; lparen = '('; rparen = ')'; to = 'to'; downto = 'downto'; blanks = blanks; Ignored Tokens blanks; Productions file = name+; expr = {name} name | {expr} lparen expr rparen // | {literal} string_literal | {number} number ; discret_range = [l]:expr to [r]:expr; name = {selected_name} name dot simple_name | {name} name1 ; name1 = {indexed} name1 lparen expr rparen | {slice} name1 lparen discret_range rparen | {atribute} name1 tick simple_name lparen expr rparen | {name} name2 ; name2 = {simple} simple_name | {literal} string_literal ; simple_name = {identifier} identifier ;