summaryrefslogtreecommitdiff
path: root/Compiler/CGrammar.g4
blob: 69b2c0a58a335733bf45a751b6bef2cb68ddcf6e (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
38
39
40
41
42
43
44
45
46
47
48
49
50
grammar CGrammar;

ID: [a-zA-Z_][a-zA-Z0-9_]*;
INT: [0-9]+;

program
    : function EOF
    ;
    
function
    : 'int' ID '(' ')' '{' statement* '}'
    ;
    
statement
    : 'return' expression ';' #returnStatement
    ;

expression
    : '(' expression ')' #parenthesizedExpression
    
    | '!' expression #notExpression
    | '~' expression #invertExpression
    
    | left=expression '*' right=expression #multiplyExpression
    | left=expression '/' right=expression #divideExpression
    | left=expression '%' right=expression #modulusExpression
    
    | left=expression '+' right=expression #addExpression
    | left=expression '-' right=expression #subtractExpression
    
    | left=expression '<' right=expression #lessThanExpression
    | left=expression '>' right=expression #greaterThanExpression
    | left=expression '<=' right=expression #lessThanOrEqualExpression
    | left=expression '>=' right=expression #greaterThanOrEqualExpression
    | left=expression '==' right=expression #equalExpression
    | left=expression '!=' right=expression #notEqualExpression
    
    | left=expression '&' right=expression #bitwiseAndExpression
    | left=expression '|' right=expression #bitwiseOrExpression
    | left=expression '^' right=expression #bitwiseXorExpression
    
    | left=expression '&&' right=expression #logicalAndExpression
    | left=expression '||' right=expression #logicalOrExpression
    
    | constant #constantExpression
    ;
    
constant
    : INT # intConstant
    ;