Programa YACC para verificar se a string dada é Palíndromo ou não
Problema: Escreva um programa YACC para verificar se a string dada é Palíndromo ou não.
Explicação:
Yacc (para “mais um compilador compilador.”) É o gerador de analisador padrão para o sistema operacional Unix. Um programa de código aberto, o yacc gera código para o analisador na linguagem de programação C. O acrônimo é geralmente processado em minúsculas, mas às vezes é visto como YACC ou Yacc.
Exemplos:
Input: naman Output: palindrome Input: geeksforgeeks Output: not palindrome
Código-fonte do Lexical Analyzer:
%{
/* Definition section */
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
%}
/* %option noyywrap */
/* Rule Section */
%%
[a-zA-Z]+ {yylval.f = yytext; return STR;}
[-+()*/] {return yytext[0];}
[ \t\n] {;}
%%
int yywrap()
{
return -1;
}
Código-fonte do analisador:
%{
/* Definition section */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern int yylex();
void yyerror(char *msg);
int flag;
int i;
int k =0;
%}
%union {
char* f;
}
%token <f> STR
%type <f> E
/* Rule Section */
%%
S : E {
flag = 0;
k = strlen($1) - 1;
if(k%2==0){
for (i = 0; i <= k/2; i++) {
if ($1[i] == $1[k-i]) {
} else {
flag = 1;
}
}
if (flag == 1) printf("Not palindrome\n");
else printf("palindrome\n");
printf("%s\n", $1);
}else{
for (i = 0; i < k/2; i++) {
if ($1[i] == $1[k-i]) {
} else {
flag = 1;
}
}
if (flag == 1) printf("Not palindrome\n");
else printf("palindrome\n");
printf("%s\n", $1);
}
}
;
E : STR {$$ = $1;}
;
%%
void yyerror(char *msg)
{
fprintf(stderr, "%s\n", msg);
exit(1);
}
//driver code
int main()
{
yyparse();
return 0;
}
Saída:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva