summaryrefslogtreecommitdiffhomepage
path: root/tools/trace/lib/parser.g
blob: ba4e974f1dfae5fdd3146f9ee43de6ee9070657b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys

from traceclass import *

%%

parser TraceParser:
    ignore:         "(#.*?)?\n"
    token START:    "^"
    token EOF:      "$"
    token EVENT:    "[a-zA-Z_]+"
    token PARAM:    "[a-zA-Z_1-9]+"
    token LENGTH:   "[1-2-4]"
    token STRING:   "\".*\""
    token CB:	    "[a-zA-Z_]+"
    token SPACE:    " "

    rule parser: START      {{ my_list = list() }}
                 (event     {{ my_list.append (event) }}
                        )*
                 EOF        {{ return my_list }}

    rule event:         "EVENT " EVENT          {{ e = TraceEvent(EVENT.strip()) }}
                        SPACE
                        ( param SPACE           {{ e.param_add (param[0], param[1]) }}
                                )*
                        ( string                {{ e.string_set (string) }}
                                )?
			( cb			{{ e.callback = cb }}
				)?
                        "\n"                    {{ return e }}

    rule param: PARAM SPACE LENGTH              {{ return [PARAM.strip(), int(LENGTH.strip())] }}

    rule string: STRING                         {{ return (STRING.strip()) }}

    rule cb: "\[" CB "\]" 			{{ return (CB.strip()) }}