tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
grammar t017parser;
 
options {
    language = Python;
}
 
program
    :   declaration+
    ;
 
declaration
    :   variable
    |   functionHeader ';'
    |   functionHeader block
    ;
 
variable
    :   type declarator ';'
    ;
 
declarator
    :   ID 
    ;
 
functionHeader
    :   type ID '(' ( formalParameter ( ',' formalParameter )* )? ')'
    ;
 
formalParameter
    :   type declarator        
    ;
 
type
    :   'int'   
    |   'char'  
    |   'void'
    |   ID        
    ;
 
block
    :   '{'
            variable*
            stat*
        '}'
    ;
 
stat: forStat
    | expr ';'      
    | block
    | assignStat ';'
    | ';'
    ;
 
forStat
    :   'for' '(' assignStat ';' expr ';' assignStat ')' block        
    ;
 
assignStat
    :   ID '=' expr        
    ;
 
expr:   condExpr
    ;
 
condExpr
    :   aexpr ( ('==' | '<') aexpr )?
    ;
 
aexpr
    :   atom ( '+' atom )*
    ;
 
atom
    : ID      
    | INT      
    | '(' expr ')'
    ; 
 
ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;
 
INT :    ('0'..'9')+
    ;
 
WS  :   (   ' '
        |   '\t'
        |   '\r'
        |   '\n'
        )+
        {$channel=HIDDEN}
    ;