-
Notifications
You must be signed in to change notification settings - Fork 0
/
grammar.lark
55 lines (55 loc) · 1.61 KB
/
grammar.lark
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
programa: lista_declaracoes
lista_declaracoes: lista_declaracoes declaracao
| declaracao
declaracao: declaracao_variaveis
| declaracao_funcoes
declaracao_variaveis : tipo ID END_COMMAND
| tipo ID S_OPEN NUM S_CLOSE END_COMMAND
tipo: INT
| VOID
declaracao_funcoes: tipo ID P_OPEN parametros P_CLOSE declaracao_composta
parametros: lista_parametros
| VOID
lista_parametros :lista_parametros COMMA param
| param
param : tipo ID
| tipo ID S_OPEN S_CLOSE
declaracao_composta: B_OPEN declaracao_locais lista_comandos B_CLOSE
declaracao_locais: declaracao_locais declaracao_variaveis
|
lista_comandos: lista_comandos comando
|
comando: declaracao_expressao
| declaracao_composta
| declaracao_selecao
| declaracao_iteracao
| declaracao_retorno
declaracao_expressao: expressao END_COMMAND
| END_COMMAND
declaracao_selecao: IF P_OPEN expressao P_CLOSE comando
| IF P_OPEN expressao P_CLOSE comando ELSE comando
declaracao_iteracao: WHILE P_OPEN expressao P_CLOSE comando
declaracao_retorno: RETURN END_COMMAND
| RETURN expressao END_COMMAND
expressao: variavel ATTR expressao
| expressao_simples
variavel: ID
| ID S_OPEN expressao S_CLOSE
expressao_simples: soma_expressao op_relacional soma_expressao
| soma_expressao
op_relacional: RELOP
soma_expressao: soma_expressao soma termo
| termo
soma: SUMOP
termo: termo mult fator
| fator
mult: MULTOP
fator: P_OPEN expressao P_CLOSE
| variavel
| ativacao
| NUM
ativacao: ID P_OPEN argumentos P_CLOSE
argumentos: lista_argumentos
|
lista_argumentos: lista_argumentos COMMA expressao
| expressao