-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBNF
187 lines (150 loc) · 4.97 KB
/
BNF
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
177
178
179
180
181
182
183
184
185
186
// programa
programa : PROGRAMA ID vars_opt rutinas_loop lienzo
vars_opt : vars | empty
rutinas_loop : rutinas_loop rutinas | empty
// vars
vars : VARIABLE tipo COLON vars_loop
vars_loop : vars | empty
// rutinas
rutinas : RUTINA rutina_opt SEMICOLON ID LPARENTHESIS parametros RPARENTHESIS bloque_rutina rutinas_loop
rutina_opt : primitivo | figura | VOID
rutinas_loop : rutinas | empty
// tipo
tipo : tipo_opt SEMICOLON
tipo_opt : tipo_opt_prim | tipo_opt_fig
tipo_opt_prim : primitivo ID tipo_opt_prim_2 tipo_opt_prim_loop
tipo_opt_prim_loop : COMA tipo_opt_prim | empty
tipo_opt_prim_2 : ini_prim | LBRACKET logica RBRACKET tipo_opt_prim_3 | empty
tipo_opt_prim_3 : ini_prim_v | empty
tipo_opt_fig : figura ID tipo_opt_fig_2
tipo_opt_fig_loop : COMA tipo_opt_prim | empty
tipo_opt_fig_2 : ini_fgra | LBRACKET logica RBRACKET tipo_opt_fig_3 | empty tipo_opt_fig_3 : ini_fgra_v | empty
// ini_prim
ini_prim : ASIGN logica
// ini_prim_v
ini_prim_v : ASIGN LBRACE logica ini_prim_v_loop RBRACE
ini_prim_v_loop : , logica ini_prim_v_loop | empty
// ini_fgra
ini_fgra : ASIGN fgra_nva
// ini_fgra_v
ini_fgra_v : ASIGN LBRACE ini_fgra_v_loop RBRACE
ini_fgras_v_loop : , logica ini_fgras_v_loop | empty
// fgra_nva
fgra_nva : nuevo fgra_atr | ID
// fgra_atr
fgra_atr : pincel LPARENTHESIS fgra_atr_end
| cuadrado LPARENTHESIS exp COMA fgra_atr_end
| circulo LPARENTHESIS exp COMA fgra_atr_end
| rectangulo LPARENTHESIS exp COMA exp COMA fgra_atr_end
| triangulo LPARENTHESIS exp COMA exp COMA exp COMA exp COMA fgra_atr_end
fgra_atr_end : exp COMA exp COMA color RPARENTHESIS
// primitivo
primitivo : TYPEINT
| TYPEFLOAT
| TYPEBOOL
| TYPESTRING
// figura
figura : PINCEL
| CUAD
| RECT
| CIRC
| TRIANG
// cte
cte : STRING
| INT
| DOUBLE
| BOOL
// parametros
parametros : tipo SEMICOLON ID parametros_loop
parametros_loop : COMA parametros
| empty
// lienzo
lienzo : LIENZO bloque_lienzo
// bloque
bloque : LBRACE bloque_loop RBRACE
bloque_loop : estatuto bloque_loop
| empty
// bloque_rutina
bloque_rutina : LBRACE bloque_rutina_opt bloque_rutina_loop bloque_rutina_opt_2 RBRACE
bloque_rutina_opt : vars
| empty
bloque_rutina_loop : estatuto bloque_rutina_loop
| empty
bloque_rutina_opt_2 : RETURN logica
| empty
// bloque_lienzo
bloque_lienzo : LBRACE bloque_lienzo_loop RBRACE
bloque_lienzo_loop : estatuto_lienzo bloque_lienzo_loop
| empty
// estatuto
estatuto : asignacion
| condicion
| ciclo
| impresion
| lectura
| accion
| llamada
//estatuto_lienzo
estatuto_lienzo : vars
| asignacion
| condicion
| ciclo
| impresion
| lectura
| accion
| llamada
// asignacion
asignacion : ID asignacion_opt ASIGN asignacion_opt_2 COLON
asignacion_opt : LBRACKET logica RBRACKET
| empty
asignacion_opt_2 : logica | lectura | fgra_nva
// condicion
condicion : IF condicion_loop condicion_opt
condicion_loop : LPARENTHESIS logica RPARENTHESIS bloque condicion_loop_opt
condicion_loop_opt : ELIF condicion_loop | empty
condicion_opt : ELSE bloque | empty
// ciclo
ciclo : WHILE LPARENTHESIS logica RPARENTHESIs bloque
// impresion
impresion : PRINT LPARENTHESIS logica RPARENTHESIS COLON
// lectura
lectura : READ LPARENTHESIS RPARENTHESIS COLON
// llamada
llamada : ID LPARENTHESIS exp llamada_loop RPARENTHESIS COLON
llamada_loop : COMA exp llamada_loop | empty
// logica
logica : expresion logica_loop
logica_loop : AND logica | OR logica | empty
// expresion
expresion : exp expresion_opt
expresion_opt : expresion_opt_opt exp | empty
expresion_opt_opt : GTHAN | GETHAN | ASIGN ASIGN | NOTEQUAL | LTHAN | LETHAN
// exp
exp : termino exp_loop
exp_loop : PLUS exp | MINUS exp | empty
// termino
termino : factor termino_loop
termino_loop : TIMES termino | DIVIDE termino | empty
// factor
factor : LPARENTHESIS expresion RPARENTHESIS | factor_opt factor_opt_2
factor_opt : PLUS | MINUS | empty
factor_opt_2 : cte | idllamada
// idllamada
idllamada : ID idllamada_opt
idllamada_opt : LPARENTHESIS exp idllamada_opt_loop RPARENTHESIS | LBRACKET expresion RBRACKET | empty
idllamada_opt_loop : COMA exp idllamada_opt_loop | empty
// accion
accion : ID POINT accion_opt COLON
accion_opt : accion_figura | accion_pincel
// accion_figura
accion_figura : accion_figura_opt RPARENTHESIS
accion_figura_opt : accion_figura_opt_2 | accion_figura_opt_3
accion_figura_opt_2 : MOVEA accion_figura_opt_2_end | ROTATE accion_figura_opt_2_end | GROW accion_figura_opt_2_end | THICK accion_figura_opt_2_end
accion_figura_opt_2_end : LPARENTHESIS expresion
accion_figura_opt_3 : REMOVE LPARENTHESIS | FILL LPARENTHESIS color
// accion_pincel
accion_pincel : accion_pincel_opt RPARENTHESIS
accion_pincel_opt : COLOR LPARENTHESIS color | DISPLACE accion_pincel_opt_end | PAINT accion_pincel_opt_end | GRAPH LPARENTHESIS CTEFUNCION COMA exp
accion_pincel_opt_end : LPARENTHESIS expresion COMA expresion
// color
color : CTECOLOR | CTEHEXCOLOR