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 '"'