File: transform.g

package info (click to toggle)
antlr 2.7.7%2Bdfsg-9.2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 9,964 kB
  • sloc: java: 54,649; cs: 12,537; makefile: 8,847; cpp: 7,359; pascal: 5,273; sh: 4,333; python: 4,299; lisp: 1,969; xml: 220; lex: 192; ansic: 127
file content (76 lines) | stat: -rw-r--r-- 1,161 bytes parent folder | download | duplicates (11)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// This file is part of PyANTLR. See LICENSE.txt for license
// details..........Copyright (C) Wolfgang Haefelinger, 2004.
//
// $Id$

options {
    language=Python;
}

class transform_p extends Parser;
options {
    buildAST = true;    // uses CommonAST by default
    ASTLabelType = "antlr.CommonAST";
}

expr
    :   mexpr (PLUS^ mexpr)* SEMI!
    ;

mexpr
    :   atom (STAR^ atom)*
    ;

atom:   INT
    ;

class transform_l extends Lexer;

WS  :   (' '
    |   '\t'
    |   '\n'
    |   '\r')
        { $skip; }
    ;

LPAREN: '('
    ;

RPAREN: ')'
    ;

STAR:   '*'
    ;

PLUS:   '+'
    ;

SEMI:   ';'
    ;

protected
DIGIT
    :   '0'..'9'
    ;

INT :   (DIGIT)+
    ;

class transform_w extends TreeParser;
options {
    buildAST = true;
    ASTLabelType = "antlr.CommonAST";
}

expr:!  #(PLUS left:expr right:expr)
        {
            if #right.getType()==INT and int(#right.getText()) == 0:
                #expr = #left
            elif #left.getType()==INT and int(#left.getText()) ==0:
                #expr = #right;
            else:
                #expr = #(PLUS, left, right);
        }
    |   #(STAR expr expr)
    |   i:INT
    ;