%{
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
// Variables for part (a)
int max_length = 0;
char longest_word[100] = "";
 
// Variables for part (b)
int vowels = 0, consonants = 0;
 
// Functions for part (c)
void check_pascal_identifier(const char *str) {
    printf("Pascal Identifier: %s\n", str);
}
 
void check_unsigned_number(const char *str) {
    printf
("Unsigned 
Number: %s\n", str);}
%}
 
%%
[a-zA-Z]+   {
                // Part (a): Find the longest word
                int length = strlen(yytext);
                if (length > max_length) {
                    max_length = length;
                    strcpy(longest_word, yytext);
                }
 
                // Part (b): Count vowels and consonants
                for (int i = 0; i < length; i++) {
                    if (strchr("aeiouAEIOU", yytext[i]))
                        vowels++;
                    else
                        consonants++;
                }
            }
 
[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?  {
                // Part (c): Match floating-point numbers with optional scientific notation
                check_unsigned_number(yytext);
            }
 
[0-9]+       {
                // Part (c): Match integers
                check_unsigned_number(yytext);
            }
 
[a-zA-Z_][a-zA-Z0-9_]*  {
                // Part (c): Match Pascal identifiers
                check_pascal_identifier(yytext);
            }
 
[^a-zA-Z0-9]+   { /* Ignore non-alphanumeric characters */ }
 
\n|\t|\r       { /* Ignore whitespace */ }
 
.|\n           { /* Catch-all rule */ }
%%
 
int main() {
    printf("Enter the input string: ");
    yylex();
    printf("\nLongest Word: %s (Length: %d)\n", longest_word, max_length);
    printf("Vowel Count: %d\n", vowels);
    printf("Consonant Count: %d\n", consonants);
    return 0;
}