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
Post a Comment