Lexical analyzer converts stream of input characters into a stream of tokens.
The different tokens that lexical analyzer identifies are as follows:
KEYWORDS: int, char, float, double, if, for, while, else, switch,
struct, printf, scanf, case, break, return, typedef, void
IDENTIFIERS: main, fopen, getch etc
NUMBERS: positive and negative integers, positive and negative floating point numbers.
OPERATORS: +, ++, -, –, ||, *, ?, /, >, >=, <, <=, =, ==, &, &&.
BRACKETS: [ ], { }, ( ).
STRINGS : Set of characters enclosed within the quotes
COMMENT LINES: Ignores single line, multi line comments
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
struct pgm
{
char line[20];
} s[100];
void check(char s[])
{
cout<<"\n";
if(!strcmpi(s,"If"))
{
cout<<"keyword:If";
return;
}
if(!strcmpi(s,"Then"))
{
cout<<"keyword:Then";
return;
}
if(!strcmpi(s,"Else"))
{
cout<<"keyword:else";
return;
}
if(!strcmpi(s,"[END]"))
{
return;
}
cout<<"expression:"<<s;
}
void main()
{
char t[20];
int i=0,j=0,k=0;
clrscr();
cout<<"\n\n enter the program code:(to stop input type End)\n";
do
{
gets(s[i].line);
}
while(strcmpi(s[i++].line,"END"));
k = k-1;
do
{
k++;
for(i=0;s[k].line[i]!='\0';i++,j++)
{
if(s[k].line[i]==' ')
{
t[j]='\0';
j=-1;
check(t);
}
else
t[j]=s[k].line[i];
}
t[j]='\0';
j=0;
check(t);
}
while(strcmpi(s[k].line,"END"));
getch();
}
Not Satisfied ? Just search & get the result
Related posts:
