Skip to content
Snippets Groups Projects
Commit 967bf512 authored by Henrique Margotte's avatar Henrique Margotte
Browse files

if funcionando, dmem adicionado, read e write adicionados

parent d8d6c1e7
Branches
No related tags found
No related merge requests found
INPP INPP
AMEM 2 AMEM 2
AMEM 3 LEIT
CRCT 0
ARMZ 0,2
CRCT 1
ARMZ 0,3
CRCT 1
ARMZ 0,1 ARMZ 0,1
CRCT 0
ARMZ 0,0
R00: NADA R00: NADA
CRVL 0,1
CRVL 0,0 CRVL 0,0
CMEG
DSVF R01
CRVL 0,3
CRVL 0,2
SOMA
ARMZ 0,4
CRVL 0,3
ARMZ 0,2
CRVL 0,4
ARMZ 0,3
CRVL 0,1 CRVL 0,1
CMME
DSVF R01
CRVL 0,0
CRCT 2
DIVI
CRCT 2
MULT
CRVL 0,0
CMIG
DSVF R02
CRVL 0,0
IMPR
CRCT 0
IMPR
CRVL 0,0
CRCT 0
CMIG
DSVF R04
CRCT 2
IMPR
DSVS R05
R04: NADA
CRCT 3
IMPR
R05: NADA
DSVS R03
R02: NADA
CRVL 0,0
IMPR
CRCT 1
IMPR
R03: NADA
CRVL 0,0
CRCT 1 CRCT 1
SOMA SOMA
ARMZ 0,1 ARMZ 0,0
DSVS R00 DSVS R00
R01: NADA R01: NADA
DMEM 2
PARA PARA
No preview for this file type
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
typedef enum simbolos { typedef enum simbolos {
simb_program, simb_var, simb_begin, simb_end, simb_program, simb_var, simb_begin, simb_end,
simb_identificador, simb_numero, simb_identificador, simb_numero,
simb_ponto, simb_virgula, simb_ponto_e_virgula, simb_dois_pontos, simb_ponto, simb_virgula, simb_ponto_e_virgula, simb_dois_pontos, simb_read, simb_write,
simb_atribuicao, simb_abre_parenteses, simb_fecha_parenteses, simb_label, simb_type, simb_array, simb_procedure, simb_function, simb_goto, simb_if, simb_then, simb_else, simb_while, simb_do, simb_or, simb_div, simb_and, simb_not, simb_igual, simb_diferente, simb_menor_igual, simb_maior_igual, simb_menor, simb_maior, simb_mais, simb_menos, simb_asterisco simb_atribuicao, simb_abre_parenteses, simb_fecha_parenteses, simb_label, simb_type, simb_array, simb_procedure, simb_function, simb_goto, simb_if, simb_then, simb_else, simb_while, simb_do, simb_or, simb_div, simb_and, simb_not, simb_igual, simb_diferente, simb_menor_igual, simb_maior_igual, simb_menor, simb_maior, simb_mais, simb_menos, simb_asterisco
} simbolos; } simbolos;
......
...@@ -70,6 +70,18 @@ end { simbolo = simb_end; ...@@ -70,6 +70,18 @@ end { simbolo = simb_end;
return T_END; return T_END;
} }
read { simbolo = simb_read;
strncpy (token, yytext, TAM_TOKEN);
IMPRIME("read ");
return READ;
}
write { simbolo = simb_write;
strncpy (token, yytext, TAM_TOKEN);
IMPRIME("write ");
return WRITE;
}
:= { simbolo = simb_atribuicao; := { simbolo = simb_atribuicao;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" atribuicao "); IMPRIME(" atribuicao ");
......
This diff is collapsed.
This diff is collapsed.
...@@ -90,7 +90,10 @@ extern int yydebug; ...@@ -90,7 +90,10 @@ extern int yydebug;
MAIS = 291, /* MAIS */ MAIS = 291, /* MAIS */
MENOS = 292, /* MENOS */ MENOS = 292, /* MENOS */
ASTERISCO = 293, /* ASTERISCO */ ASTERISCO = 293, /* ASTERISCO */
NUMERO = 294 /* NUMERO */ NUMERO = 294, /* NUMERO */
READ = 295, /* READ */
WRITE = 296, /* WRITE */
LOWER_THAN_ELSE = 297 /* LOWER_THAN_ELSE */
}; };
typedef enum yytokentype yytoken_kind_t; typedef enum yytokentype yytoken_kind_t;
#endif #endif
......
...@@ -31,7 +31,10 @@ stack_t *rot; ...@@ -31,7 +31,10 @@ stack_t *rot;
%token GOTO IF THEN ELSE WHILE DO OR DIV %token GOTO IF THEN ELSE WHILE DO OR DIV
%token AND NOT IGUAL DIFERENTE MENOR_IGUAL %token AND NOT IGUAL DIFERENTE MENOR_IGUAL
%token MAIOR_IGUAL MENOR MAIOR MAIS MENOS %token MAIOR_IGUAL MENOR MAIOR MAIS MENOS
%token ASTERISCO NUMERO %token ASTERISCO NUMERO READ WRITE
%nonassoc LOWER_THAN_ELSE
%nonassoc ELSE
%% %%
...@@ -52,7 +55,13 @@ bloco : ...@@ -52,7 +55,13 @@ bloco :
{ {
} }
comando_composto comando_composto {
retira(desloc,ts);
char buffer[50];
sprintf(buffer,"DMEM %d",desloc);
geraCodigo(NULL,buffer);
desloc = 0;
}
; ;
...@@ -136,6 +145,35 @@ comando_sem_rotulo: atribuicao ...@@ -136,6 +145,35 @@ comando_sem_rotulo: atribuicao
| comando_composto | comando_composto
| comando_condicional | comando_condicional
| comando_repetitivo | comando_repetitivo
| leitura
| escrita
;
leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
;
lista_leituras: lista_leituras VIRGULA simb_leitura
| simb_leitura
;
simb_leitura: IDENT {
geraCodigo(NULL, "LEIT");
l_elem = busca(token,ts);
char buffer[50];
sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->desloc);
geraCodigo(NULL,buffer);
}
;
escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES
;
lista_escritas: lista_escritas VIRGULA expressao_simples {
geraCodigo(NULL,"IMPR");
}
| expressao_simples {
geraCodigo(NULL,"IMPR");
}
; ;
expressao: expressao IGUAL expressao_simples { expressao: expressao IGUAL expressao_simples {
...@@ -247,10 +285,19 @@ comando_repetitivo: { ...@@ -247,10 +285,19 @@ comando_repetitivo: {
} }
; ;
comando_condicional: if_then elses comando_condicional: if_then cond_else {
char r_fim[4];
desempilha(r_fim,rot);
geraCodigo(r_fim,"NADA");
}
;
cond_else: ELSE
comando_sem_rotulo
| %prec LOWER_THAN_ELSE
; ;
if_then: IF expressao THEN { if_then: IF expressao {
char r_else[4]; char r_else[4];
sprintf(r_else,"R%02d",rot_id); sprintf(r_else,"R%02d",rot_id);
empilha(r_else,rot); empilha(r_else,rot);
...@@ -265,14 +312,23 @@ if_then: IF expressao THEN { ...@@ -265,14 +312,23 @@ if_then: IF expressao THEN {
empilha(r_fim, rot); empilha(r_fim, rot);
rot_id += 1; rot_id += 1;
} }
comando_sem_rotulo { THEN comando_sem_rotulo {
char r_fim[4];
desempilha(r_fim,rot);
char r_else[4];
desempilha(r_else,rot);
} empilha(r_fim,rot);
char buffer[50];
strcpy(buffer, "DSVS ");
strcat(buffer,r_fim);
geraCodigo(NULL,buffer);
elses: ELSE comando_sem_rotulo elses geraCodigo(r_else,"NADA");
| }
; ;
%% %%
int main (int argc, char** argv) { int main (int argc, char** argv) {
......
...@@ -351,8 +351,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); ...@@ -351,8 +351,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
(yy_hold_char) = *yy_cp; \ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \ *yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp; (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 41 #define YY_NUM_RULES 43
#define YY_END_OF_BUFFER 42 #define YY_END_OF_BUFFER 44
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
...@@ -360,20 +360,21 @@ struct yy_trans_info ...@@ -360,20 +360,21 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static const flex_int16_t yy_accept[107] = static const flex_int16_t yy_accept[115] =
{ 0, { 0,
0, 0, 42, 41, 2, 1, 13, 14, 38, 36, 0, 0, 44, 43, 2, 1, 15, 16, 40, 38,
11, 37, 12, 39, 10, 9, 34, 30, 35, 40, 13, 39, 14, 41, 12, 11, 36, 32, 37, 42,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
40, 40, 40, 40, 2, 0, 39, 8, 32, 31, 42, 42, 42, 42, 42, 2, 0, 41, 10, 34,
33, 40, 40, 40, 40, 40, 25, 40, 40, 40, 33, 35, 42, 42, 42, 42, 42, 27, 42, 42,
40, 21, 40, 40, 26, 40, 40, 40, 40, 40, 42, 42, 23, 42, 42, 28, 42, 42, 42, 42,
0, 0, 28, 40, 40, 27, 40, 7, 40, 40, 42, 42, 42, 0, 0, 30, 42, 42, 29, 42,
40, 29, 40, 40, 40, 5, 40, 3, 40, 40, 7, 42, 42, 42, 31, 42, 42, 42, 42, 5,
23, 40, 20, 40, 40, 40, 22, 16, 40, 17, 42, 42, 3, 42, 42, 25, 42, 22, 42, 42,
6, 40, 15, 40, 40, 24, 40, 40, 40, 40, 42, 8, 24, 18, 42, 42, 19, 6, 42, 17,
40, 4, 19, 40, 18, 0 42, 42, 26, 9, 42, 42, 42, 42, 42, 4,
21, 42, 20, 0
} ; } ;
static const YY_CHAR yy_ec[256] = static const YY_CHAR yy_ec[256] =
...@@ -416,78 +417,82 @@ static const YY_CHAR yy_meta[39] = ...@@ -416,78 +417,82 @@ static const YY_CHAR yy_meta[39] =
3, 3, 3, 3, 3, 3, 3, 3 3, 3, 3, 3, 3, 3, 3, 3
} ; } ;
static const flex_int16_t yy_base[109] = static const flex_int16_t yy_base[117] =
{ 0, { 0,
0, 0, 116, 117, 113, 117, 108, 117, 117, 117, 0, 0, 123, 124, 120, 124, 115, 124, 124, 124,
117, 117, 117, 102, 97, 117, 24, 117, 96, 0, 124, 124, 124, 109, 104, 124, 24, 124, 103, 0,
12, 88, 16, 16, 74, 78, 84, 88, 75, 72, 12, 95, 16, 16, 81, 85, 91, 95, 82, 79,
71, 22, 84, 76, 98, 93, 87, 117, 117, 117, 78, 87, 22, 90, 23, 105, 100, 94, 124, 124,
117, 0, 76, 64, 71, 58, 0, 60, 71, 62, 124, 124, 0, 83, 71, 78, 65, 0, 67, 78,
56, 0, 70, 54, 0, 57, 64, 54, 52, 57, 69, 63, 0, 77, 61, 0, 64, 75, 70, 60,
76, 43, 0, 63, 54, 0, 57, 0, 58, 47, 58, 63, 62, 81, 44, 0, 68, 59, 0, 62,
54, 0, 30, 46, 52, 0, 46, 66, 33, 41, 0, 63, 52, 59, 0, 32, 59, 50, 56, 0,
0, 35, 0, 41, 45, 34, 0, 0, 43, 0, 50, 42, 69, 36, 44, 0, 38, 0, 44, 48,
0, 38, 0, 41, 41, 0, 28, 22, 28, 26, 37, 0, 0, 0, 46, 45, 0, 0, 40, 0,
21, 0, 0, 30, 0, 117, 48, 60 44, 46, 0, 0, 32, 24, 30, 28, 22, 0,
0, 31, 0, 124, 48, 60
} ; } ;
static const flex_int16_t yy_def[109] = static const flex_int16_t yy_def[117] =
{ 0, { 0,
106, 1, 106, 106, 106, 106, 106, 106, 106, 106, 114, 1, 114, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115,
107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
107, 107, 107, 107, 106, 108, 106, 106, 106, 106, 115, 115, 115, 115, 115, 114, 116, 114, 114, 114,
106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 115, 115, 115, 116, 116, 115, 115, 115, 115, 115,
107, 107, 107, 107, 107, 107, 107, 108, 107, 107, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115,
107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
107, 107, 107, 107, 107, 0, 106, 106 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
115, 115, 115, 0, 114, 114
} ; } ;
static const flex_int16_t yy_nxt[156] = static const flex_int16_t yy_nxt[163] =
{ 0, { 0,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 20, 14, 15, 16, 17, 18, 19, 20, 21, 22, 20,
23, 24, 25, 26, 20, 27, 28, 20, 29, 30, 23, 24, 25, 26, 20, 27, 28, 20, 29, 30,
31, 20, 20, 32, 20, 33, 34, 20, 39, 40, 31, 32, 20, 33, 20, 34, 35, 20, 40, 41,
43, 46, 48, 44, 49, 47, 57, 78, 62, 85, 44, 47, 49, 45, 50, 48, 59, 62, 83, 65,
42, 105, 104, 86, 103, 102, 101, 100, 99, 58, 43, 90, 113, 112, 63, 91, 111, 110, 109, 60,
61, 98, 61, 97, 96, 95, 94, 93, 92, 91, 64, 108, 64, 107, 106, 105, 104, 103, 102, 101,
90, 62, 89, 88, 87, 84, 83, 82, 81, 80, 100, 99, 98, 97, 65, 96, 95, 94, 93, 92,
79, 62, 77, 76, 75, 74, 73, 72, 71, 70, 89, 88, 87, 86, 85, 84, 65, 82, 81, 80,
69, 68, 67, 66, 65, 64, 63, 37, 62, 35, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70,
60, 59, 56, 55, 54, 53, 52, 51, 50, 45, 69, 68, 67, 66, 38, 65, 36, 61, 58, 57,
41, 38, 37, 36, 35, 106, 3, 106, 106, 106, 56, 55, 54, 53, 52, 51, 46, 42, 39, 38,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 37, 36, 114, 3, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
114, 114
} ; } ;
static const flex_int16_t yy_chk[156] = static const flex_int16_t yy_chk[163] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 17, 17, 1, 1, 1, 1, 1, 1, 1, 1, 17, 17,
21, 23, 24, 21, 24, 23, 32, 62, 62, 73, 21, 23, 24, 21, 24, 23, 33, 35, 65, 65,
107, 104, 101, 73, 100, 99, 98, 97, 95, 32, 115, 76, 112, 109, 35, 76, 108, 107, 106, 33,
108, 94, 108, 92, 89, 86, 85, 84, 82, 80, 116, 105, 116, 102, 101, 99, 96, 95, 91, 90,
79, 78, 77, 75, 74, 71, 70, 69, 67, 65, 89, 87, 85, 84, 83, 82, 81, 79, 78, 77,
64, 61, 60, 59, 58, 57, 56, 54, 53, 51, 74, 73, 72, 70, 68, 67, 64, 63, 62, 61,
50, 49, 48, 46, 45, 44, 43, 37, 36, 35, 60, 59, 58, 57, 55, 54, 52, 51, 50, 49,
34, 33, 31, 30, 29, 28, 27, 26, 25, 22, 47, 46, 45, 44, 38, 37, 36, 34, 32, 31,
19, 15, 14, 7, 5, 3, 106, 106, 106, 106, 30, 29, 28, 27, 26, 25, 22, 19, 15, 14,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 7, 5, 3, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
106, 106, 106, 106, 106 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
114, 114
} ; } ;
static yy_state_type yy_last_accepting_state; static yy_state_type yy_last_accepting_state;
...@@ -531,8 +536,8 @@ char *yytext; ...@@ -531,8 +536,8 @@ char *yytext;
int nl = 1; int nl = 1;
#line 535 "lex.yy.c" #line 540 "lex.yy.c"
#line 536 "lex.yy.c" #line 541 "lex.yy.c"
#define INITIAL 0 #define INITIAL 0
...@@ -752,7 +757,7 @@ YY_DECL ...@@ -752,7 +757,7 @@ YY_DECL
#line 41 "compilador.l" #line 41 "compilador.l"
#line 756 "lex.yy.c" #line 761 "lex.yy.c"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{ {
...@@ -779,13 +784,13 @@ yy_match: ...@@ -779,13 +784,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 107 ) if ( yy_current_state >= 115 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_base[yy_current_state] != 117 ); while ( yy_base[yy_current_state] != 124 );
yy_find_action: yy_find_action:
yy_act = yy_accept[yy_current_state]; yy_act = yy_accept[yy_current_state];
...@@ -864,306 +869,324 @@ YY_RULE_SETUP ...@@ -864,306 +869,324 @@ YY_RULE_SETUP
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 73 "compilador.l" #line 73 "compilador.l"
{ simbolo = simb_read;
strncpy (token, yytext, TAM_TOKEN);
IMPRIME("read ");
return READ;
}
YY_BREAK
case 9:
YY_RULE_SETUP
#line 79 "compilador.l"
{ simbolo = simb_write;
strncpy (token, yytext, TAM_TOKEN);
IMPRIME("write ");
return WRITE;
}
YY_BREAK
case 10:
YY_RULE_SETUP
#line 85 "compilador.l"
{ simbolo = simb_atribuicao; { simbolo = simb_atribuicao;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" atribuicao "); IMPRIME(" atribuicao ");
return ATRIBUICAO; return ATRIBUICAO;
} }
YY_BREAK YY_BREAK
case 9: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 79 "compilador.l" #line 91 "compilador.l"
{ simbolo = simb_ponto_e_virgula; { simbolo = simb_ponto_e_virgula;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" pt_virgula "); IMPRIME(" pt_virgula ");
return PONTO_E_VIRGULA; return PONTO_E_VIRGULA;
} }
YY_BREAK YY_BREAK
case 10: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 85 "compilador.l" #line 97 "compilador.l"
{ simbolo = simb_dois_pontos; { simbolo = simb_dois_pontos;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" dois pontos "); IMPRIME(" dois pontos ");
return DOIS_PONTOS; return DOIS_PONTOS;
} }
YY_BREAK YY_BREAK
case 11: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 91 "compilador.l" #line 103 "compilador.l"
{ simbolo = simb_virgula; { simbolo = simb_virgula;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" virgula "); IMPRIME(" virgula ");
return VIRGULA; return VIRGULA;
} }
YY_BREAK YY_BREAK
case 12: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 98 "compilador.l" #line 110 "compilador.l"
{ simbolo = simb_ponto; { simbolo = simb_ponto;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" ponto "); IMPRIME(" ponto ");
return PONTO; return PONTO;
} }
YY_BREAK YY_BREAK
case 13: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 104 "compilador.l" #line 116 "compilador.l"
{ simbolo = simb_abre_parenteses; { simbolo = simb_abre_parenteses;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" abre_parenteses "); IMPRIME(" abre_parenteses ");
return ABRE_PARENTESES; return ABRE_PARENTESES;
} }
YY_BREAK YY_BREAK
case 14: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 110 "compilador.l" #line 122 "compilador.l"
{ simbolo = simb_fecha_parenteses; { simbolo = simb_fecha_parenteses;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" fecha_parenteses "); IMPRIME(" fecha_parenteses ");
return FECHA_PARENTESES; return FECHA_PARENTESES;
} }
YY_BREAK YY_BREAK
case 15: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 116 "compilador.l" #line 128 "compilador.l"
{ simbolo = simb_label; { simbolo = simb_label;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("label "); IMPRIME("label ");
return LABEL; return LABEL;
} }
YY_BREAK YY_BREAK
case 16: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 122 "compilador.l" #line 134 "compilador.l"
{ simbolo = simb_type; { simbolo = simb_type;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("type "); IMPRIME("type ");
return TYPE; return TYPE;
} }
YY_BREAK YY_BREAK
case 17: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 128 "compilador.l" #line 140 "compilador.l"
{ simbolo = simb_array; { simbolo = simb_array;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("array "); IMPRIME("array ");
return ARRAY; return ARRAY;
} }
YY_BREAK YY_BREAK
case 18: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 134 "compilador.l" #line 146 "compilador.l"
{ simbolo = simb_procedure; { simbolo = simb_procedure;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("procedure "); IMPRIME("procedure ");
return PROCEDURE; return PROCEDURE;
} }
YY_BREAK YY_BREAK
case 19: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 140 "compilador.l" #line 152 "compilador.l"
{ simbolo = simb_function; { simbolo = simb_function;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("function "); IMPRIME("function ");
return FUNCTION; return FUNCTION;
} }
YY_BREAK YY_BREAK
case 20: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 146 "compilador.l" #line 158 "compilador.l"
{ simbolo = simb_goto; { simbolo = simb_goto;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("goto "); IMPRIME("goto ");
return GOTO; return GOTO;
} }
YY_BREAK YY_BREAK
case 21: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 152 "compilador.l" #line 164 "compilador.l"
{ simbolo = simb_if; { simbolo = simb_if;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("if "); IMPRIME("if ");
return IF; return IF;
} }
YY_BREAK YY_BREAK
case 22: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 158 "compilador.l" #line 170 "compilador.l"
{ simbolo = simb_then; { simbolo = simb_then;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" then "); IMPRIME(" then ");
return THEN; return THEN;
} }
YY_BREAK YY_BREAK
case 23: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 164 "compilador.l" #line 176 "compilador.l"
{ simbolo = simb_else; { simbolo = simb_else;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" else "); IMPRIME(" else ");
return ELSE; return ELSE;
} }
YY_BREAK YY_BREAK
case 24: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 170 "compilador.l" #line 182 "compilador.l"
{ simbolo = simb_while; { simbolo = simb_while;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME("while "); IMPRIME("while ");
return WHILE; return WHILE;
} }
YY_BREAK YY_BREAK
case 25: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 176 "compilador.l" #line 188 "compilador.l"
{ simbolo = simb_do; { simbolo = simb_do;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" do "); IMPRIME(" do ");
return DO; return DO;
} }
YY_BREAK YY_BREAK
case 26: case 28:
YY_RULE_SETUP YY_RULE_SETUP
#line 182 "compilador.l" #line 194 "compilador.l"
{ simbolo = simb_or; { simbolo = simb_or;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" or "); IMPRIME(" or ");
return OR; return OR;
} }
YY_BREAK YY_BREAK
case 27: case 29:
YY_RULE_SETUP YY_RULE_SETUP
#line 188 "compilador.l" #line 200 "compilador.l"
{ simbolo = simb_div; { simbolo = simb_div;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" div "); IMPRIME(" div ");
return DIV; return DIV;
} }
YY_BREAK YY_BREAK
case 28: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 194 "compilador.l" #line 206 "compilador.l"
{ simbolo = simb_and; { simbolo = simb_and;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" and "); IMPRIME(" and ");
return AND; return AND;
} }
YY_BREAK YY_BREAK
case 29: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 200 "compilador.l" #line 212 "compilador.l"
{ simbolo = simb_not; { simbolo = simb_not;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" not "); IMPRIME(" not ");
return NOT; return NOT;
} }
YY_BREAK YY_BREAK
case 30: case 32:
YY_RULE_SETUP YY_RULE_SETUP
#line 206 "compilador.l" #line 218 "compilador.l"
{ simbolo = simb_igual; { simbolo = simb_igual;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" igual "); IMPRIME(" igual ");
return IGUAL; return IGUAL;
} }
YY_BREAK YY_BREAK
case 31: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 212 "compilador.l" #line 224 "compilador.l"
{ simbolo = simb_diferente; { simbolo = simb_diferente;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" diferente "); IMPRIME(" diferente ");
return DIFERENTE; return DIFERENTE;
} }
YY_BREAK YY_BREAK
case 32: case 34:
YY_RULE_SETUP YY_RULE_SETUP
#line 218 "compilador.l" #line 230 "compilador.l"
{ simbolo = simb_menor_igual; { simbolo = simb_menor_igual;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" menor_igual "); IMPRIME(" menor_igual ");
return MENOR_IGUAL; return MENOR_IGUAL;
} }
YY_BREAK YY_BREAK
case 33: case 35:
YY_RULE_SETUP YY_RULE_SETUP
#line 224 "compilador.l" #line 236 "compilador.l"
{ simbolo = simb_maior_igual; { simbolo = simb_maior_igual;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" maior_igual "); IMPRIME(" maior_igual ");
return MAIOR_IGUAL; return MAIOR_IGUAL;
} }
YY_BREAK YY_BREAK
case 34: case 36:
YY_RULE_SETUP YY_RULE_SETUP
#line 230 "compilador.l" #line 242 "compilador.l"
{ simbolo = simb_menor; { simbolo = simb_menor;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" menor "); IMPRIME(" menor ");
return MENOR; return MENOR;
} }
YY_BREAK YY_BREAK
case 35: case 37:
YY_RULE_SETUP YY_RULE_SETUP
#line 236 "compilador.l" #line 248 "compilador.l"
{ simbolo = simb_maior; { simbolo = simb_maior;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" maior "); IMPRIME(" maior ");
return MAIOR; return MAIOR;
} }
YY_BREAK YY_BREAK
case 36: case 38:
YY_RULE_SETUP YY_RULE_SETUP
#line 242 "compilador.l" #line 254 "compilador.l"
{ simbolo = simb_mais; { simbolo = simb_mais;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" mais "); IMPRIME(" mais ");
return MAIS; return MAIS;
} }
YY_BREAK YY_BREAK
case 37: case 39:
YY_RULE_SETUP YY_RULE_SETUP
#line 248 "compilador.l" #line 260 "compilador.l"
{ simbolo = simb_menos; { simbolo = simb_menos;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" menos "); IMPRIME(" menos ");
return MENOS; return MENOS;
} }
YY_BREAK YY_BREAK
case 38: case 40:
YY_RULE_SETUP YY_RULE_SETUP
#line 254 "compilador.l" #line 266 "compilador.l"
{ simbolo = simb_asterisco; { simbolo = simb_asterisco;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" asterisco "); IMPRIME(" asterisco ");
return ASTERISCO; return ASTERISCO;
} }
YY_BREAK YY_BREAK
case 39: case 41:
YY_RULE_SETUP YY_RULE_SETUP
#line 260 "compilador.l" #line 272 "compilador.l"
{ simbolo = simb_numero; { simbolo = simb_numero;
strncpy (token, yytext,TAM_TOKEN); strncpy (token, yytext,TAM_TOKEN);
IMPRIME(" numero "); IMPRIME(" numero ");
return NUMERO; return NUMERO;
} }
YY_BREAK YY_BREAK
case 40: case 42:
YY_RULE_SETUP YY_RULE_SETUP
#line 266 "compilador.l" #line 278 "compilador.l"
{ simbolo = simb_identificador; { simbolo = simb_identificador;
strncpy (token, yytext, TAM_TOKEN); strncpy (token, yytext, TAM_TOKEN);
IMPRIME(" ident "); IMPRIME(" ident ");
return IDENT; return IDENT;
} }
YY_BREAK YY_BREAK
case 41: case 43:
YY_RULE_SETUP YY_RULE_SETUP
#line 272 "compilador.l" #line 284 "compilador.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1167 "lex.yy.c" #line 1190 "lex.yy.c"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
yyterminate(); yyterminate();
...@@ -1460,7 +1483,7 @@ static int yy_get_next_buffer (void) ...@@ -1460,7 +1483,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 107 ) if ( yy_current_state >= 115 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
...@@ -1488,11 +1511,11 @@ static int yy_get_next_buffer (void) ...@@ -1488,11 +1511,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 107 ) if ( yy_current_state >= 115 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 106); yy_is_jam = (yy_current_state == 114);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
...@@ -2168,6 +2191,6 @@ void yyfree (void * ptr ) ...@@ -2168,6 +2191,6 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 272 "compilador.l" #line 284 "compilador.l"
program cmdIf (input, output);
var i, j: integer;
begin
read(j);
i:=0;
while i < j do
begin
if i div 2 * 2 = i
then
begin
write(i,0);
if i = 0
then write(2)
else write(3);
end
else write(i,1);
i := i+1;
end;
end.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment