Home | History | Annotate | Download | only in functional
      1 grammar t017parser;
      2 
      3 options {
      4     language = JavaScript;
      5 }
      6 
      7 program
      8     :   declaration+
      9     ;
     10 
     11 declaration
     12     :   variable
     13     |   functionHeader ';'
     14     |   functionHeader block
     15     ;
     16 
     17 variable
     18     :   type declarator ';'
     19     ;
     20 
     21 declarator
     22     :   ID 
     23     ;
     24 
     25 functionHeader
     26     :   type ID '(' ( formalParameter ( ',' formalParameter )* )? ')'
     27     ;
     28 
     29 formalParameter
     30     :   type declarator        
     31     ;
     32 
     33 type
     34     :   'int'   
     35     |   'char'  
     36     |   'void'
     37     |   ID        
     38     ;
     39 
     40 block
     41     :   '{'
     42             variable*
     43             stat*
     44         '}'
     45     ;
     46 
     47 stat: forStat
     48     | expr ';'      
     49     | block
     50     | assignStat ';'
     51     | ';'
     52     ;
     53 
     54 forStat
     55     :   'for' '(' assignStat ';' expr ';' assignStat ')' block        
     56     ;
     57 
     58 assignStat
     59     :   ID '=' expr        
     60     ;
     61 
     62 expr:   condExpr
     63     ;
     64 
     65 condExpr
     66     :   aexpr ( ('==' | '<') aexpr )?
     67     ;
     68 
     69 aexpr
     70     :   atom ( '+' atom )*
     71     ;
     72 
     73 atom
     74     : ID      
     75     | INT      
     76     | '(' expr ')'
     77     ; 
     78 
     79 ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
     80     ;
     81 
     82 INT :	('0'..'9')+
     83     ;
     84 
     85 WS  :   (   ' '
     86         |   '\t'
     87         |   '\r'
     88         |   '\n'
     89         )+
     90         {$channel=HIDDEN;}
     91     ;    
     92