Skip to main content

3. Write a lex program to display the number of lines, words and characters in an input text.



There's a Lex program that displays the number of lines, words, and characters in an input text, along with explanations for each line of code:


```lex

%{

#include <stdio.h>

int lineCount = 0;

int wordCount = 0;

int charCount = 0;

%}


%%

\n         { lineCount++; }          // Match newline characters

[^\n\t ]+  { wordCount++; }          // Match non-space, non-tab, non-newline characters

[^\n]+     { charCount += yyleng; }  // Match any characters

.         ;                          // Match any other characters

%%


int main() {

    yylex();  // Start Lex analysis

    printf("Lines: %d\nWords: %d\nCharacters: %d\n", lineCount, wordCount, charCount);

    return 0;

}

```


Explanation of each line:


1. `%{ ... %}`: This section allows you to include C code that will be copied directly into the generated Lex code.


2. `#include <stdio.h>`: This includes the standard I/O library for printing.


3. `int lineCount = 0;`: Declare a variable to count lines and initialize it to 0.


4. `int wordCount = 0;`: Declare a variable to count words and initialize it to 0.


5. `int charCount = 0;`: Declare a variable to count characters and initialize it to 0.


6. `%%`: This is the start of the Lex rules section.


7. `\n         { lineCount++; }`: This rule matches newline characters and increments the line count.


8. `[^\n\t ]+  { wordCount++; }`: This rule matches sequences of characters that are not spaces, tabs, or newlines, and increments the word count.


9. `[^\n]+     { charCount += yyleng; }`: This rule matches any sequence of characters that is not a newline and increments the character count by the length of the matched sequence.


10. `.`: This rule matches any character that didn't match any of the previous rules.


11. `;`: This rule is a no-op, it simply matches a single character and does nothing.


12. `%%`: This marks the end of the Lex rules section.


13. `int main() {`: The main function of the program starts here.


14. `yylex();`: Initiates Lex analysis.


15. `printf("Lines: %d\nWords: %d\nCharacters: %d\n", lineCount, wordCount, charCount);`: Prints the counts of lines, words, and characters.


16. `return 0;`: Exits the program with a success status.


This Lex program matches and counts lines, words, and characters in the input text, and then prints the counts using the `printf` statement in the `main` function.


Comments