| # Copyright 2006 Google, Inc. All Rights Reserved. | 
 | # Licensed to PSF under a Contributor Agreement. | 
 |  | 
 | # A grammar to describe tree matching patterns. | 
 | # Not shown here: | 
 | # - 'TOKEN' stands for any token (leaf node) | 
 | # - 'any' stands for any node (leaf or interior) | 
 | # With 'any' we can still specify the sub-structure. | 
 |  | 
 | # The start symbol is 'Matcher'. | 
 |  | 
 | Matcher: Alternatives ENDMARKER | 
 |  | 
 | Alternatives: Alternative ('|' Alternative)* | 
 |  | 
 | Alternative: (Unit | NegatedUnit)+ | 
 |  | 
 | Unit: [NAME '='] ( STRING [Repeater] | 
 |                  | NAME [Details] [Repeater] | 
 |                  | '(' Alternatives ')' [Repeater] | 
 |                  | '[' Alternatives ']' | 
 | 		 ) | 
 |  | 
 | NegatedUnit: 'not' (STRING | NAME [Details] | '(' Alternatives ')') | 
 |  | 
 | Repeater: '*' | '+' | '{' NUMBER [',' NUMBER] '}' | 
 |  | 
 | Details: '<' Alternatives '>' |