0% found this document useful (0 votes)
28 views

VIBHU CD Files

The document contains code for three programs that analyze code tokens: 1. A program to identify lexemes from a given program by separating tokens on whitespace. 2. A program to identify and remove comment lines from a given program. 3. A program to print different tokens like keywords, operators, variables from a given program.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views

VIBHU CD Files

The document contains code for three programs that analyze code tokens: 1. A program to identify lexemes from a given program by separating tokens on whitespace. 2. A program to identify and remove comment lines from a given program. 3. A program to print different tokens like keywords, operators, variables from a given program.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128

Roll No: 2000320100152 Branch & Section: CSE-C

Experiment No: 1
AIM: Write a Program to identify lexemes from a given program.
THEORY: A lexeme is a sequence of alphanumeric characters in a token. The term is used in
both the study of language and in the lexical analysis of computer program compilation. Lexemes
are part of the input stream from which tokens are identified.

PROGRAM:
#include <stdio.h>
main()
{
int i, n, token=1;
char str[50];
printf ("Enter the string: ");
gets(str);
n = strlen(str);
printf("\t");
for(i=0;i<n;i++)
{
if(str[i]!=' ')
{

printf("%c",str[i]);
}
else
{
token++;
printf("\n");
printf("\t");
}
}
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
printf("\n");
printf("Total number of token is : %d",token);
}

OUTPUT:
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C

EXPERIMENT NO: 2
AIM: Write a program to identify and remove comment lines from a given program.
PROGRAM:
#include <stdio.h>
char main()
{
int i, n ,token=1;
char str[50];
gets(str);
n = strlen(str);
printf("\t");
for( i =0;i<n;i++)
{
if(str[i]!=' ' || (str[i]=="/" && str[i+1]=="/"))
{
printf("%c",str[i]);
}
else
{
token++;
printf("\n");
printf("\t");
}
}
printf("\n");
printf("total number of token is : %d",token);
}
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
OUTPUT:
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C

EXPERIMENT NO: 3
AIM: Write a program to print different tokens such as Keywords, Operators, Special Symbols
and Variables from a given program.

PROGRAM:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
bool isDelimiter(char ch)
{
if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' ||
ch == '/' || ch == ',' || ch == ';' || ch == '>' ||
ch == '<' || ch == '=' || ch == '(' || ch == ')' ||
ch == '[' || ch == ']' || ch == '{' || ch == '}')
return (true);
return (false);
}
bool isOperator(char ch)
{
if (ch == '+' || ch == '-' || ch == '*' ||
ch == '/' || ch == '>' || ch == '<' ||
ch == '=')
return (true);
return (false);
}
bool validIdentifier(char* str)
{
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
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' || isDelimiter(str[0]) == true)
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 isInteger(char* str)
{
int i, len = strlen(str);
if (len == 0)
return (false);
for (i = 0; i < len; i++) {
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
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 isRealNumber(char* str)
{
int i, len = strlen(str);
bool hasDecimal = 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] == '.')
hasDecimal = true;
}
return (hasDecimal);
}
char* subString(char* str, int left, int right)
{
int i;
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
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 parse(char* str)
{
int left = 0, right = 0;
int len = strlen(str);
while (right <= len && left <= right) {
if (isDelimiter(str[right]) == false)
right++;
if (isDelimiter(str[right]) == true && left == right) {
if (isOperator(str[right]) == true)
printf("'%c' IS AN OPERATOR\n", str[right]);
right++;
left = right;
} else if (isDelimiter(str[right]) == true && left != right
|| (right == len && left != right)) {
char* subStr = subString(str, left, right - 1);
if (isKeyword(subStr) == true)
printf("'%s' IS A KEYWORD\n", subStr);

else if (isInteger(subStr) == true)


printf("'%s' IS AN INTEGER\n", subStr);
else if (isRealNumber(subStr) == true)
Name: SAUTRAMANI VIBHUTI Admission NO : 2020b0101128
Roll No: 2000320100152 Branch & Section: CSE-C
printf("'%s' IS A REAL NUMBER\n", subStr);
else if (validIdentifier(subStr) == true
&& isDelimiter(str[right - 1]) == false)
printf("'%s' IS A VALID IDENTIFIER\n", subStr);
else if (validIdentifier(subStr) == false
&& isDelimiter(str[right - 1]) == false)
printf("'%s' IS NOT A VALID IDENTIFIER\n", subStr);
left = right;
}
}
return;
}
int main()
{
char str[100] = "while i am ! = to 3c ";
parse(str);
return (0);
}

OUTPUT:
Name: VIVEK KUMAR SAROJ Admission NO : 2020b0101018
Roll No: 2000320100194 Branch & Section: CSE-C
EXPERIMENT NO: 4
AIM: Write a program to remove redundant spaces, tabs and new lines from a given program.

PROGRAM: #include <stdio.h>


main(){
int i , n, token=1;
char str[50];
printf("Enter the string: ");
gets(str);
n = strlen(str);
printf("\t");
for( i =0;i<n;i++)
{ if(str[i]!=' ')
{
printf("%c",str[i]);
} else
{
token ++;
continue;
}}
printf("\n");
printf("total number of token is : %d",token);
}
OUTPUT:
Name: VIVEK KUMAR SAROJ Admission NO : 2020b0101018
Roll No: 2000320100194 Branch & Section: CSE-C
EXPERIMENT NO: 5
AIM: Write a program to check whether the Input string is accepted or not by a given Regular
Expression.
PROGRAM:
#include<stdio.h>
main()
{
char ch[50];
int n;
printf("Enter the size of the string: ");
scanf("%d",&n);
if(n==0)
{
printf("String Accepted");
}
else
{
printf("Enter the string: ");
scanf("%s",&ch);
straccept(ch,n,0);
}
}
void straccept(char* ch,int n,int i)
{
if(i==n)
{
printf("String accepted");
return;
Name: VIVEK KUMAR SAROJ Admission NO : 2020b0101018
Roll No: 2000320100194 Branch & Section: CSE-C
}
if(ch[i]!='a' && ch[i]!='b'&&ch[i]!='\0')
{
printf("String Rejected");
return;
}
straccept(ch,n,i+1);
}

OUTPUT:

You might also like