1 # Copyright 2006 Google, Inc. All Rights Reserved. 2 # Licensed to PSF under a Contributor Agreement. 3 4 # A grammar to describe tree matching patterns. 5 # Not shown here: 6 # - 'TOKEN' stands for any token (leaf node) 7 # - 'any' stands for any node (leaf or interior) 8 # With 'any' we can still specify the sub-structure. 9 10 # The start symbol is 'Matcher'. 11 12 Matcher: Alternatives ENDMARKER 13 14 Alternatives: Alternative ('|' Alternative)* 15 16 Alternative: (Unit | NegatedUnit)+ 17 18 Unit: [NAME '='] ( STRING [Repeater] 19 | NAME [Details] [Repeater] 20 | '(' Alternatives ')' [Repeater] 21 | '[' Alternatives ']' 22 ) 23 24 NegatedUnit: 'not' (STRING | NAME [Details] | '(' Alternatives ')') 25 26 Repeater: '*' | '+' | '{' NUMBER [',' NUMBER] '}' 27 28 Details: '<' Alternatives '>' 29