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