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