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

Popular posts from this blog

Program 6: Finding Prime Numbers in a Range

  ** Program 6: Finding Prime Numbers in a Range ** ```assembly .model small .stack 100h .data     start dw 1     end dw 20 .code     main proc         mov ax, start           ; Load 'start' into AX              find_primes:         inc ax                  ; Move to the next number         cmp ax, end             ; Compare with 'end'         jg end_prog             ; Jump to end if AX > 'end'                  mov cx, ax              ; Copy AX to CX   ...

4. Write a LEX Program to convert the substring abc to ABC from the given input string.

Sure, here's a LEX program that converts the substring "abc" to "ABC" in the given input string: ```lex %{ #include <stdio.h> %} %% .*abc.*    { printf("%s", yytext); }    /* Match and print everything containing 'abc' */ .         ;                            /* Ignore other characters */ %% int main() {     yylex();     return 0; } ``` Now, let's break down the code line by line: 1. `%{` and `%}`: These are used to enclose C code that should be included in the generated C code. In this case, it includes the standard input-output library (`<stdio.h>`). 2. `.*abc.*`: This is a regular expression pattern. It matches any sequence of characters that contains the substring "abc". 3. `{ printf("%s", yytext); }`: This is the action associated with the pattern. When the pattern is matched, the `yytext` variable contains the matched te...

ktu 2019 Cse Complier programing Lab Syllabus

 1Design and implement a lexical analyzer using C language to recognize all valid tokens  in the input program. The lexical analyzer should ignore redundant spaces, tabs and  newlines. It should also ignore comments. 2. Implement a Lexical Analyzer for a given program using Lex Tool. 3. Write a lex program to display the number of lines, words and characters in an input text. 4. Write a LEX Program to convert the substring abc to ABC from the given input string. 5. Write a lex program to find out the total number of vowels and consonants from the given  input string. 6. Generate a YACC specification to recognize a valid arithmetic expression that uses  operators +, – , *,/ and parenthesis. 7. Generate a YACC specification to recognize a valid identifier which starts with a letter  followed by any number of letters or digits.   8. Implementation of Calculator using LEX and YACC  9. Convert the BNF rules into YACC form and write code to generat...