diff --git a/compilador.y b/compilador.y
index e10c0ea7078f81344faf7d5b0b1cc1543566e4f2..d13a16b1d558c8547994b0028059952cc7e44024 100644
--- a/compilador.y
+++ b/compilador.y
@@ -176,6 +176,7 @@ declaracao_procedimento: PROCEDURE IDENT {
             geraCodigo(r_proc,buffer);
             mostra_ts(ts);
             }
+            parametros_ou_nada
             PONTO_E_VIRGULA bloco
             { 
                 // Retorna ao nível léxico anterior e mantém o deslocamento atualizado
@@ -183,6 +184,20 @@ declaracao_procedimento: PROCEDURE IDENT {
             }
 ;
 
+parametros_ou_nada: ABRE_PARENTESES paramentros_formais FECHA_PARENTESES
+            |
+;
+
+paramentros_formais: secao_pfs
+            | paramentros PONTO_E_VIRGULA secao_pfs
+;
+
+secao_pfs: lista_id_pf DOIS_PONTOS tipo
+
+parametro: IDENT {
+
+            }
+;
 
 comando_composto: T_BEGIN comandos T_END
 ;
diff --git a/ts/ts.c b/ts/ts.c
index c5465938c84f256dc400e15f00e82ab8f71a26b9..d4a2d34e41d2b2ba8a211093654750b0bcc7e248 100644
--- a/ts/ts.c
+++ b/ts/ts.c
@@ -82,6 +82,22 @@ void atualiza_tipo(int n, int tipo, ts_t *ts){
 	}
 }
 
+void adiciona_param(char *ident, int n, int tipo, int passagem, ts_t *ts){
+    if(ts == NULL || ts->topo == NULL || n <= 0) return;
+
+    // Add n parameters to ident procedure params
+    simb_t *p = busca(ident, ts);
+    if (p == NULL || p->categ != PR) return;
+
+    p->info.pr.param = (int **)realloc(p->info.pr.param, (p->info.pr.quant + n) * sizeof(int *));
+    for (int i = p->info.pr.quant; i < p->info.pr.quant + n; i++) {
+        p->info.pr.param[i] = (int *)malloc(2 * sizeof(int));
+        p->info.pr.param[i][0] = tipo;
+        p->info.pr.param[i][1] = passagem;
+    }
+    p->info.pr.quant += n;
+}
+
 void mostra_ts(ts_t *ts) {
     if (ts == NULL || ts->topo == NULL) {
         printf("Tabela de Símbolos está vazia ou não inicializada.\n");
diff --git a/ts/ts.h b/ts/ts.h
index c2c5825cb49d905a69bca6c71f1248516fbdb277..7cefb19029a19e221e98ede37a64324e920d2438 100644
--- a/ts/ts.h
+++ b/ts/ts.h
@@ -61,6 +61,8 @@ void retira(int n, ts_t *ts);
 
 void atualiza_tipo(int n, int tipo, ts_t *ts);
 
+void adiciona_param(char *ident, int n, int tipo, int passagem, ts_t *ts);
+
 void mostra_ts(ts_t *ts);
 
 #endif