( note: newlines '\n' ); Grammar { rules: [ Rule { identifier: Identifier "start", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "_" } }, Expression { .zero_or_more = { expression = Expression { .identifier = { identifier = Identifier "rule" } } } }, ], ] }, Rule { identifier: Identifier "_", choice: Choice [ Sequence [ Expression { .zero_or_more = { expression = Expression { .identifier = { identifier = Identifier "space" } } } }, ], ] }, Rule { identifier: Identifier "space", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal " " } }, ], Sequence [ Expression { .literal = { literal = Literal " " } }, ], Sequence [ Expression { .literal = { literal = Literal "\n" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "comment" } }, ], ] }, Rule { identifier: Identifier "comment", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal "//" } }, Expression { .zero_or_more = { expression = Expression { .character_set = { char_set = Char_Set { bits = [ 0xfffffffffffffbff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } } } }, Expression { .literal = { literal = Literal "\n" } }, ], ] }, Rule { identifier: Identifier "rule", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "identifier" } }, Expression { .literal = { literal = Literal "=" } }, Expression { .identifier = { identifier = Identifier "_" } }, Expression { .identifier = { identifier = Identifier "choice" } }, Expression { .literal = { literal = Literal ";" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], ] }, Rule { identifier: Identifier "identifier", choice: Choice [ Sequence [ Expression { .one_or_more = { expression = Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x07fffffe87fffffe, 0x0000000000000000, 0x0000000000000000, ] } } } } }, Expression { .identifier = { identifier = Identifier "_" } }, ], ] }, Rule { identifier: Identifier "choice", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "sequence" } }, Expression { .zero_or_more = { expression = Expression { .parenthesis = { choice = Choice [ Sequence [ Expression { .literal = { literal = Literal "|" } }, Expression { .identifier = { identifier = Identifier "_" } }, Expression { .identifier = { identifier = Identifier "sequence" } }, ], ] } } } }, ], ] }, Rule { identifier: Identifier "choice_", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal "|" } }, Expression { .identifier = { identifier = Identifier "_" } }, Expression { .identifier = { identifier = Identifier "sequence" } }, ], ] }, Rule { identifier: Identifier "sequence", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "expression" } }, Expression { .zero_or_more = { expression = Expression { .parenthesis = { choice = Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "space" } }, Expression { .identifier = { identifier = Identifier "expression" } }, ], ] } } } }, ], ] }, Rule { identifier: Identifier "sequence_", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "space" } }, Expression { .identifier = { identifier = Identifier "expression" } }, ], ] }, Rule { identifier: Identifier "expression", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal "(" } }, Expression { .identifier = { identifier = Identifier "_" } }, Expression { .identifier = { identifier = Identifier "choice" } }, Expression { .literal = { literal = Literal ")" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "expression" } }, Expression { .literal = { literal = Literal "?" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "expression" } }, Expression { .literal = { literal = Literal "+" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "expression" } }, Expression { .literal = { literal = Literal "*" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "item" } }, ], ] }, Rule { identifier: Identifier "item", choice: Choice [ Sequence [ Expression { .identifier = { identifier = Identifier "identifier" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "literal" } }, ], Sequence [ Expression { .identifier = { identifier = Identifier "set" } }, ], ] }, Rule { identifier: Identifier "literal", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal """ } }, Expression { .one_or_more = { expression = Expression { .parenthesis = { choice = Choice [ Sequence [ Expression { .character_set = { char_set = Char_Set { bits = [ 0xfffffffbfffffbff, 0xffffffffefffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0xfffffffffffffbff, 0xfeffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\x" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x0000007e0000007e, 0x0000000000000000, 0x0000000000000000, ] } } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x0000007e0000007e, 0x0000000000000000, 0x0000000000000000, ] } } }, ], ] } } } }, Expression { .literal = { literal = Literal """ } }, Expression { .identifier = { identifier = Identifier "_" } }, ], ] }, Rule { identifier: Identifier "literal_", choice: Choice [ Sequence [ Expression { .character_set = { char_set = Char_Set { bits = [ 0xfffffffbfffffbff, 0xffffffffefffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0xfffffffffffffbff, 0xfeffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\x" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x0000007e0000007e, 0x0000000000000000, 0x0000000000000000, ] } } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x0000007e0000007e, 0x0000000000000000, 0x0000000000000000, ] } } }, ], ] }, Rule { identifier: Identifier "set", choice: Choice [ Sequence [ Expression { .literal = { literal = Literal "[" } }, Expression { .one_or_more = { expression = Expression { .parenthesis = { choice = Choice [ Sequence [ Expression { .character_set = { char_set = Char_Set { bits = [ 0xffffffffffffffff, 0xffffffffcfffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0xffffffffffffffff, 0xfeffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\x" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x07fffffe07fffffe, 0x0000000000000000, 0x0000000000000000, ] } } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x07fffffe07fffffe, 0x0000000000000000, 0x0000000000000000, ] } } }, ], ] } } } }, Expression { .literal = { literal = Literal "]" } }, Expression { .identifier = { identifier = Identifier "_" } }, ], ] }, Rule { identifier: Identifier "set_", choice: Choice [ Sequence [ Expression { .character_set = { char_set = Char_Set { bits = [ 0xffffffffffffffff, 0xffffffffcfffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0xffffffffffffffff, 0xfeffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, ] } } }, ], Sequence [ Expression { .literal = { literal = Literal "\x" } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x07fffffe07fffffe, 0x0000000000000000, 0x0000000000000000, ] } } }, Expression { .character_set = { char_set = Char_Set { bits = [ 0x03ff000000000000, 0x07fffffe07fffffe, 0x0000000000000000, 0x0000000000000000, ] } } }, ], ] }, ] }