summaryrefslogtreecommitdiff
path: root/tools/trace/lib/parser.g
blob: 2cee66b54e5317fd7cc6bb4c40999b6bac9ac38e (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
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 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) }}
                                )*
                        "\n"                    {{ return e }}

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

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