Programa Lex para Contar Números Positivos, Números Negativos y Fracciones

Problema: Escriba un programa Lex para contar los números positivos, números negativos y fracciones

Explicación:
FLEX (Fast Lexical Analyzer Generator) es una herramienta/programa informático para generar analizadores léxicos (escáneres o lexers) escrito por Vern Paxson en C alrededor de 1987. Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C. La función yylex() es la principal función flexible que ejecuta la sección de reglas.

Requisito previo: Flex (generador de analizador léxico rápido)

Ejemplos:

Input: 2 -8 -2.5 8.5 
Output: No. of positive numbers: 1
        No. of Negative numbers: 1
        No. of Positive numbers in fractions: 1
        No. of Negative numbers in fractions: 1 

Input: 1 2 3 -4 -5 6.5 7.5 
Output: No. of positive numbers: 3
        No. of Negative numbers: 2
        No. of Positive numbers in fractions: 2
        No. of Negative numbers in fractions: 0 

Implementación:

/* Lex program to Count the Positive numbers, 
      - Negative numbers and Fractions  */
  
%{
     /* Definition section */
    int postiveno=0;
    int negtiveno=0;
    int positivefractions=0;
    int negativefractions=0;
%}
  
/* Rule Section */
DIGIT [0-9]
%%
  
\+?{DIGIT}+             postiveno++;
-{DIGIT}+               negtiveno++;
  
\+?{DIGIT}*\.{DIGIT}+   positivefractions++;
-{DIGIT}*\.{DIGIT}+     negativefractions++;
. ;   
%%
  
// driver code
int main()
{
    yylex();
    printf("\nNo. of positive numbers: %d", postiveno);
    printf("\nNo. of Negative numbers: %d", negtiveno);
    printf("\nNo. of Positive numbers in fractions: %d", positivefractions);
    printf("\nNo. of Negative numbers in fractions: %d\n", negativefractions);
    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 *