-
Notifications
You must be signed in to change notification settings - Fork 0
/
SOSGramatica.grm
177 lines (159 loc) · 7.13 KB
/
SOSGramatica.grm
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
"Name" = 'Nome Aleatóio'
"Version" = '1.0 beta'
"Author" = 'Todos da Sessão'
"Case Sensitive" = 'True'
"Start Symbol" = <Inicio>
!Definições básicas
Numero = {Number}+('.'{Number}+)?
Identificador = {Letter}({AlphaNumeric} | '_')*
Boolean = 'true' | 'false'
{String Char} = {Printable} - ["\]
CadeiaCarac = '"' ({String Char} | '\'{Printable})* '"'
!Inicio da Gramática
<Inicio> ::= <Constantes> <Classe>
| <Classe>
!Outras Definições
<Numero> ::= Numero | '-'Numero
<Tipos Primitivos> ::= 'int'
| 'bool'
| 'float'
| 'string'
<Operador Logico> ::= '!' | '&&' | '||'
<Operador Relacional> ::= '!=' | '==' | '<' | '<=' | '>' | '>=' | '='
<Op Inc Dec> ::= '++' | '--'
!Constantes
<Constantes> ::= 'const' '{' <Codigo Constantes> '}'
<Codigo Constantes> ::= <Tipos Primitivos> <Declaracao Constantes> ';' <Codigo Constantes>
|
<Declaracao Constantes> ::= Identificador
| Identificador '=' <Valor Inicializacao>
| Identificador ',' <Declaracao Constantes>
| Identificador '=' <Valor Inicializacao> ',' <Declaracao Constantes>
!Variaveis
<Variaveis> ::= 'variables' '{' <Codigo Variaveis> '}'
<Codigo Variaveis> ::= <Tipos Primitivos> <Declaracao Variaveis> ';' <Codigo Variaveis>
| Identificador <Declaracao Variaveis> ';' <Codigo Variaveis>
|
<Declaracao Variaveis> ::= Identificador
| Identificador '=' <Valor Inicializacao>
| Identificador ',' <Declaracao Variaveis>
| Identificador '=' <Valor Inicializacao> ',' <Declaracao Variaveis>
| Identificador<Matriz>
| Identificador<Matriz> '=' <Inicializa Matriz>
| Identificador<Matriz> '=' <Inicializa Matriz> ',' <Declaracao Variaveis>
| Identificador<Matriz> '=' <Chamada Metodo>
| Identificador<Matriz> '=' <Chamada Metodo> ',' <Declaracao Variaveis>
!Coisas Importantes
<Valor Inicializacao> ::= <Expr Arit>
| Boolean
| CadeiaCarac
<Atribuicao> ::= Identificador '=' <Valor Inicializacao> ';'
| Identificador '=' <Acesso atributo>
| Identificador<Op Inc Dec> ';'
| <Acesso atributo> '=' <Valor Inicializacao> ';'
!Classe
<Classe> ::= 'class' Identificador '{' <Codigo Classe> '}' <Classe>
| 'class' Identificador 'extends' Identificador '{' <Codigo Classe> '}' <Classe>
|
<Codigo Classe> ::= <Variaveis> <Codigo Classe>
| <Metodo> <Codigo Classe>
| <Chamada Metodo> ';' <Codigo Classe>
| <Acesso Atributo> ';' <Codigo Classe>
|
!Metodos
<Metodo> ::= 'method' <Tipo Retorno> Identificador '(' <Parametros Metodo> ')' '{' <Codigo Metodo> 'return' <Retorno> ';' '}'
<Tipo Retorno> ::= <Tipos Primitivos>
| 'void'
| Identificador
<Parametros Metodo> ::= <Tipos Parametros> Identificador ',' <Parametros Metodo>
| <Tipos Parametros> Identificador
| <Tipos Parametros> Identifficador<Matriz> ',' <Parametros Metodo>
| <Tipos Parametros> Identificador<Matriz>
|
<Tipos Parametros> ::= <Tipos Primitivos>
| Identificador
<Codigo Metodo> ::= <Variaveis> <Codigo Metodo>
| <If> <Codigo Metodo>
| <While> <Codigo Metodo>
| <Read> <Codigo Metodo>
| <Write> <Codigo Metodo>
| <Atribuicao> <Codigo Metodo>
| <Chamada Metodo> ';' <Codigo Metodo>
|
<Retorno> ::= '(' <Valores Retorno> ')'
| <Valores Retorno>
<Valores Retorno> ::= <Numero>
| Boolean
| Identificador
| 'void'
|
!Vetores e Matrizes
<Matriz> ::= '[' <Idice Matriz> ']' <Matriz>
| '[' <Idice Matriz> ']'
<Idice Matriz> ::= Numero
| Identificador
|
<Inicializa Matriz> ::= '{' <Linhas Matriz> '}'
<Linhas Matriz> ::= '(' <Colunas Matriz> ')' ',' <Linhas Matriz> | '(' <Colunas Matriz> ')'
<Colunas Matriz> ::= Numero ',' <Colunas Matriz>
| Numero
| <Chamada Metodo>
!Chamada de Método
<Chamada Metodo> ::= Identificador'.'Identificador'('<Argumentos Metodo>')'
| Identificador'('<Argumentos Metodo>')'
!Definir o que pode ser passado como argumento de uma função
<Argumentos Metodo> ::= <Valores Argumentos> ',' <Argumentos Metodo>
| <Valores Argumentos>
<Valores Argumentos> ::= <Numero>
| Boolean
| <Chamada Metodo>
| Identificador
| Identificador<Matriz>
| <Acesso Atributo>
|
!Expressoes aritméticas
<Expr Arit> ::= <Mult Exp> '+' <Expr Arit> | <Mult Exp> '-' <Expr Arit> | <Mult Exp>
<Mult Exp> ::= <Negate Exp> '*' <Mult Exp> | <Negate Exp> '/' <Mult Exp> | <Negate Exp>
<Valor Exp> ::= Numero | Identificador | Identificador<Matriz> | <Chamada Metodo> | <Acesso Atributo> | '('<Expr Arit>')'
<Negate Exp> ::= '-' <Valor Exp> | <Valor Exp>
!Acesso a atributo
<Acesso Atributo> ::= Identificador'.'Identificador
| Identificador<Matriz>'.'Identificador
!If
<If> ::= 'if' '(' <Expressao Logica> ')' <Variacoes If>
<Variacoes If> ::= 'then' '{' <Codigo If> '}'
| 'then' '{' <Codigo If> '}' <Variacoes Else>
<Variacoes Else> ::= 'else' '{' <Codigo If> '}'
| 'else' <If>
<Codigo If> ::= <Read> <Codigo If>
| <Write> <Codigo If>
| <Atribuicao> <Codigo If>
| <If> <Codigo If>
|
<Expressao Logica> ::= <Escopo Expressao If> <Operador Logico> <Expressao Logica>
| <Escopo Expressao If>
<Escopo Expressao If> ::= <Opcoes Expressao Logica> <Operador Relacional> <Opcoes Expressao Logica>
| '(' <Opcoes Expressao Logica> <Operador Relacional> <Opcoes Expressao Logica> ')'
| Boolean
|<Chamada Metodo>
<Opcoes Expressao Logica> ::= Identificador
| <Numero>
| Identificador<Matriz>
| Boolean
!While
<While> ::= 'while' '(' <Expressao Logica> ')' '{' <Codigo If> '}'
!Read
<Read> ::= 'read' '(' <Parametro Read> ')' ';'
<Parametro Read> ::= <Opcoes Read> ',' <Parametro Read>
| <Opcoes Read>
<Opcoes Read> ::= Identificador
| Identificador<Matriz>
| <Acesso Atributo>
!Write
<Write> ::= 'write' '(' <Conteudo Write> ')' ';'
<Conteudo Write> ::= <Opcoes Write> ',' <Conteudo Write>
| <Opcoes Write>
<Opcoes Write> ::= Identificador
| Identificador<Matriz>
| <Acesso Atributo>
| CadeiaCarac