1grammar t050decorate;
2options {
3  language = Python;
4}
5
6@header {
7    def logme(func):
8        def decorated(self, *args, **kwargs):
9            self.events.append('before')
10            try:
11                return func(self, *args, **kwargs)
12            finally:
13                self.events.append('after')
14
15        return decorated
16}
17
18@parser::init {
19self.events = []
20}
21
22document
23@decorate {
24    @logme
25}
26    : IDENTIFIER
27    ;
28
29IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
30