/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 /**
 TODO:
 SwitchCASE incompleto
 */

grammar Template; 

//DEFINICAO DE TOKENS ----------------------------------------------------------

fragment    DIGITO      : [0-9] ;
fragment    CHARACTER   : [a-zA-Z_] ;
fragment    CHARACTER_UP: [A-Z];
ID                      : CHARACTER ( CHARACTER | DIGITO )* ;
T_INTEIRO               : DIGITO+ ;
R_WS                    : ('\t'|'\r'|'\n')+ -> skip ;//' '|

init
    : (expression | literal)+ EOF
    ;

literal
    : '\'' any '\''
    ;
any
    : (ID|T_INTEIRO|','|':'|'='|'-'|'_'|'<'|'>'|' ')+
   ;

expression 
    : '{' part ('|' part)* '}'
    ;
part 
    :  pre=literal? '[' stmt ']' pos=literal? 
    ;
stmt
    : arg
    | call
    ;
    
call
    : ID '(' args? ')'
    ;
args
    : arg (',' arg)*
    ;
arg 
    : literal
    | seletor
    | number
    | call
    ;
seletor
    :  ID ('.' ID)*
    ;
number
    :  (T_INTEIRO '.')? T_INTEIRO
    ;

