Programa YACC para verificar si la string dada es Palindrome o no

Problema: escriba un programa YACC para verificar si la string dada es Palindrome o no.

Explicación:
Yacc (por «otro compilador compilador más») es el generador de analizador estándar para el sistema operativo Unix. Un programa de código abierto, yacc genera código para el analizador en el lenguaje de programación C. El acrónimo generalmente se representa en minúsculas, pero ocasionalmente se ve como YACC o Yacc.

Ejemplos:

Input: naman
Output: palindrome

Input: geeksforgeeks
Output: not palindrome 

Código fuente del analizador léxico:

%{
    /* 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 fuente del analizador:

%{
    /* 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;
 }

Producción:

Publicación traducida automáticamente

Artículo escrito por thakur_aman y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *