0% found this document useful (0 votes)
12 views5 pages

CSE425 Assignment

Uploaded by

masteraf646
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views5 pages

CSE425 Assignment

Uploaded by

masteraf646
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

North South University

Department of Electrical and Computer Engineering


Course: CSE425
Section : 09

Submitted to:
Mohammad Abdur Rouf

Submitted by:
Shaikh Farhana Supti
1. Write a program using either C/C++, Java or Python language
for a lexical analyzer that can tokenize a C statement and can
detect C keywords.

Ans:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char str[500];
printf("Insert a statement: ");
scanf("%s" , str);
printf("All Tokens are: \n");
DetectTokens(str);
return (0);
}

bool ValidDelimiter(char c)
{
if
(c == ' ' || c == '+' || c == '-' || c == '*' ||
c == '/' || c == ',' || c == ';' || c == '>' ||
c == '<' || c == '=' || c == '(' || c == ')' ||
c == '[' || c == ']' || c == '{' || c == '}')
return (true);

return (false);
}

bool ValidOp(char c)
{
if
(c == '+' || c == '-' || c == '*' ||
c == '/' || c == '>' || c == '<' ||
c == '=')
return (true);

return (false);
}
bool ValidIdentifier(char* str)
{
if
(str[0] == '0' || str[0] == '1' || str[0] == '2' ||
str[0] == '3' || str[0] == '4' || str[0] == '5' ||
str[0] == '6' || str[0] == '7' || str[0] == '8' ||
str[0] == '9' || ValidDelimiter(str[0]) == true)
return (false);

return (true);
}

bool IsInteger(char* str)


{
int i, len = strlen(str);

if (len == 0)
return (false);

for (i = 0; i < len; i++) {


if
(str[i] != '0' && str[i] != '1' && str[i] != '2'&& str[i] != '3' && str[i] != '4' && str[i] != '5'
&& str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9' || (str[i] == '-' && i > 0))
return (false);
}
return (true);
}

bool isKeyword(char* str)


{
if
(!strcmp(str, "if") || !strcmp(str, "else") || !strcmp(str, "while") || !strcmp(str, "do") || !strcmp(str,
"break") || !strcmp(str, "continue") || !strcmp(str, "int")
|| !strcmp(str, "double") || !strcmp(str, "float") || !strcmp(str, "return") || !strcmp(str, "char") ||
!strcmp(str, "case") || !strcmp(str, "char")
|| !strcmp(str, "sizeof") || !strcmp(str, "long") || !strcmp(str, "short") || !strcmp(str, "typedef") ||
!strcmp(str, "switch") || !strcmp(str, "unsigned")
|| !strcmp(str, "void") || !strcmp(str, "static") || !strcmp(str, "struct") || !strcmp(str, "goto"))
return (true);

return (false);
}

bool RealNumber(char* str)


{
int i, len = strlen(str);
bool Decimal = false;
if (len == 0)
return (false);
for (i = 0; i < len; i++) {
if (str[i] != '0' && str[i] != '1' && str[i] != '2' && str[i] != '3' && str[i] != '4' && str[i] != '5' &&
str[i] != '6' && str[i] != '7' && str[i] != '8'
&& str[i] != '9' && str[i] != '.' || (str[i] == '-' && i > 0))
return (false);
if (str[i] == '.')
Decimal = true;
}
return (Decimal);
}

char* subString(char* str, int left, int right)


{
int i;
char* subStr = (char*) malloc( sizeof(char) * (right - left + 2));
for (i = left; i <= right; i++)
subStr[i - left] = str[i];
subStr[right - left + 1] = '\0';
return (subStr);
}

void DetectTokens(char* str)


{
int left = 0, right = 0;
int length = strlen(str);
while (right <= length && left <= right) {
if (ValidDelimiter(str[right]) == false)
right++;
if (ValidDelimiter(str[right]) == true && left == right)
{
if (ValidOp(str[right]) == true)
printf("Valid operator: '%c' \n", str[right]);
right++;
left = right;
}
else if (ValidDelimiter(str[right]) == true && left != right || (right == length && left != right))
{
char* subStr = subString(str, left, right - 1);
if (isKeyword(subStr) == true)
printf("Valid keyword: '%s' \n", subStr);
else if (IsInteger(subStr) == true)
printf("Valid Integer: '%s' \n", subStr);
else if (RealNumber(subStr) == true)
printf("Real Number: '%s' \n", subStr);
else if (ValidIdentifier(subStr) == true
&& ValidDelimiter(str[right - 1]) == false)
printf("Valid Identifier: '%s' \n", subStr);
else if (ValidIdentifier(subStr) == false
&& ValidDelimiter(str[right - 1]) == false)
printf("Invalid Identifier: '%s' \n", subStr);
left = right;
}
}
return;
}

Screenshot:

You might also like