Here is the LL(1) grammar used to decode a subtreeSpecification as described by RFC 3672
<SubtreeSpecification> ::= '{' <spse> <base-e> <chopSpecification> <spse> <refinement-e> '}' <base-e> ::= «base» <sps> <localName> <spse> ',' <spse> | e <chopSpecification> ::= «chopSpecification» '{' <spse> <chopSpecification-in> '}' <chopSpecification-in> ::= «specificExclusions» <spse> <chop-set-of-choice> <spse> <specificExclusions-follower> | «minimum» <sps> <number> <spse> <minimum-follower> | «maximum» <sps> <number> <spse> <specificExclusions-follower> ::= ',' <spse> «minimum» <sps> <number> <spse> <minimum-follower> | ',' <spse> «maximum» <sps> <number> <spse> <minimum-follower> ::= ',' <spse> «maximum» <sps> <number> <spse> <refinement-e> ::= «specificationFilter» <sps> <refinement> | e <refinement> ::= «item» <spse> ':' <spse> OID <spse> | «and» <spse> ':' <spse> <set-of-refinement> | «or» <spse> ':' <spse> <set-of-refinement> | «not» <spse> ':' <spse> <refinement> | <set-of-refinement> ::= '{' <spse> <refinement> <refinements> '}' <spse> <refinements> ::= ',' <spse> <refinement> | e <localName> ::= '"' DN '"'