Lex program to recognize a valid arithmetic expression and to recognize the identifiers and operators present. Print them separately.
Problem definition:
Write a Lex Program to recognize a valid arithmetic expression. If the arithmetic expression is valid then recognize the identifiers and operators present in the expression and print identifiers and operators separately.
Structure of LEX Program:
%{ Definition section %} %% Rules section %% User Subroutine section |
Click here to know – How to Compile & Run LEX / YACC Programs on Windows 8, 10, and 11?
Source Code to recognize a valid arithmetic expression and display operators and identifiers in it
%{ #include<stdio.h> #include<string.h> int flag=0,i=0,j,k=0; char operand[20][20],oparator[20][20]; %} %% [a-zA-Z0-9]+ {flag++; strcpy(operand[i],yytext); i++;} [-+*/] {flag--; strcpy(oparator[k],yytext); k++;} %% int main(int argc, char* argv[]) { printf("enter an arithmetic expression\n"); yylex(); if(flag!=1) printf("Invalid expression\n"); else { printf("Valid expression\n"); printf("The operands are\t"); for(j=0;j<i;j++) printf("%s\t",operand[j]); printf("\nThe operators are\t"); for(j=0;j<k;j++) printf("%s\t",oparator[j]); printf("\n"); } } int yywrap( ) { return 1; }
Output:
input.c
is the input file for the program
maheshgh@maheshgh:~/LexYacc$ lex demo.l
maheshgh@maheshgh:~/LexYacc$ gcc lex.yy.c
maheshgh@maheshgh:~/LexYacc$ ./a.out
Enter an arithmetic expression
a+b*c
Valid expression
The operands are a b c
The operators are + *
maheshgh@maheshgh:~/LexYacc$ ./a.out
Enter an arithmetic expression
a+b*
Invalid expression
Summary:
This article discusses how to write a Lex Program to recognize a valid arithmetic expression and to recognize the identifiers and operators present. Print them separately. If you like the article, do share it with your friends.