-
Notifications
You must be signed in to change notification settings - Fork 38
/
Enquanto.g4
39 lines (31 loc) · 1.51 KB
/
Enquanto.g4
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
grammar Enquanto;
programa : seqComando; // sequência de comandos
seqComando: comando (';' comando)* ;
comando: ID ':=' expressao # atribuicao
| 'skip' # skip
| 'se' booleano 'entao' comando 'senao' comando # se
| 'enquanto' booleano 'faca' comando # enquanto
| 'exiba' TEXTO # exiba
| 'escreva' expressao # escreva
| '{' seqComando '}' # bloco
;
expressao: INT # inteiro
| 'leia' # leia
| ID # id
| expressao '*' expressao # opBin
| expressao ('+' | '-') expressao # opBin
| '(' expressao ')' # expPar
;
booleano: BOOLEANO # bool
| expressao '=' expressao # opRel
| expressao '<=' expressao # opRel
| 'nao' booleano # naoLogico
| booleano 'e' booleano # eLogico
| '(' booleano ')' # boolPar
;
BOOLEANO: 'verdadeiro' | 'falso';
INT: ('0'..'9')+ ;
ID: ('a'..'z')+;
TEXTO: '"' .*? '"';
Comentario: '#' .*? '\n' -> skip;
Espaco: [ \t\n\r] -> skip;