-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMojicaBNF.txt
65 lines (45 loc) · 1.52 KB
/
MojicaBNF.txt
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
56
57
58
59
60
61
62
63
64
65
Linguagem Mojica
versão 24/05/2017
----------------------------------------------
PROG -> MAIN LFUNC
MAIN -> "void" "main" "(" ")" "{" VARDECL SEQCOMANDOS "}"
VARDECL -> VARDECL TIPO TOKEN_id ";"
| vazio
TIPO -> "int" | "bool"
SEQCOMANDOS -> SEQCOMANDOS COMANDO
| vazio
COMANDO -> "skip();"
| TOKEN_id ":=" EXPS ";"
| TOKEN_id "(" LISTAEXP ")" ";"
| "if" "(" BOOLEXP ")" "{" SEQCOMANDOS "}"
| "while" "(" BOOLEXP ")" "do" "{" SEQCOMANDOS "}"
| "return" TIPORETURN ";"
BOOLEXP -> "true" | "false" | "not" "(" BOOLEXP ")" | "and" "(" BOOLEXP ")" "(" BOOLEXP ")"
| "or" "(" BOOLEXP ")" "(" BOOLEXP ")" | "leq" "(" EXPS ")" "(" EXPS ")"
TIPORETURN -> EXPS
| EXPBOOL
EXPS -> TERMO | EXPS OPA TERMO
TERMO -> FATOR | TERMO OPM FATOR
FATOR -> TOKEN_id | TOKEN_id "(" LISTAEXP ")" | TOKEN_numliteral | "(" EXPS ")"
LISTAEXP -> EXPS | LISTAEXP "," EXPS
LFUNC -> FUNC LFUNC
| vazio
FUNC -> TIPO TOKEN_id "(" LISTAARG ")" "{" VARDECL SEQCOMANDOS "}"
LISTAARG -> TIPO TOKEN_id | LISTAARG "," TIPO TOKEN_id
=====================================
Convenções léxicas
^^^^^^^^^^ ^^^^^^^
TOKEN_id -> letra letraoudigito* finalsublinhado*
TOKEN_numliteral -> digitos facao_opcional expoente_opcional
OPA -> "+" | "-"
OPM -> "*" | "/"
onde:
letra -> [a-zA-Z]
digito -> [0-9]
digitos -> digito+
facao_opcional -> (.digitos)?
expoente_opcional -> (E (+ | -)? digitos)?
letraoudigito -> letra | digito
finalsublinhado -> _letraoudigito+
letra -> [a-zA-Z]
digito -> [0-9]