Home Coding Ground
Login
C program to detect tokens in a C program
C Server Side Programming Programming
C In Depth: The Complete Practical C++: Learn C++ Master C And Embedded C
C Programming Guide For Basics Step By Step Programming Learn As
Beginners You Go
45 Lectures 4.5 hours 50 Lectures 4.5 hours 66 Lectures 5.5 hours
TELCOMA Global Edouard Renard NerdyElectronics
More Detail More Detail More Detail
Here, we will create a c program to detect tokens in a C program. This is called the lexical
analysis phase of the compiler. The lexical analyzer is the part of the compiler that detects the
We make use of First and third party cookies to improve our user experience. By using this website, you agree
token of the program and sends it to the syntax analyzer.
with our Cookies Policy.
Token is the smallest entity of the code, it is either a keyword, identifier, constant, string literal,
symbol. Agree
Examples of different types of tokens in C.
Examples of different types of tokens in C.
Learn more
Example
Keywords: for, if, include, etc
Identifier: variables, functions, etc
separators: ‘,’, ‘;’, etc
operators: ‘‐’, ‘=’, ‘++’, etc
Program to detect tokens in a C program−
Example
Live Demo
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
bool isValidDelimiter(char ch) {
if (ch == ' ' || ch == '+' || ch == '‐' || ch == '*' ||
ch == '/' || ch == ',' || ch == ';' || ch == '>' ||
ch == '<' || ch == '=' || ch == '(' || ch == ')' ||
ch == '[' || ch == ']' || ch == '{' || ch == '}')
return (true);
return (false);
}
bool isValidOperator(char ch){
if (ch == '+' || ch == '‐' || ch == '*' ||
ch == '/' || ch == '>' || ch == '<' ||
ch == '=')
return (true);
return (false);
}
// Returns 'true' if the string is a VALID IDENTIFIER.
bool isvalidIdentifier(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' || isValidDelimiter(str[0]) == true)
return (false);
return (true);
}
bool isValidKeyword(char* str) {
if (!strcmp(str, "if") || !strcmp(str, "else") || !strcmp(str, "while") || !strcmp
|| !strcmp(str, "double") || !strcmp(str, "float") || !strcmp(str, "return") ||
|| !strcmp(str, "sizeof") || !strcmp(str, "long") || !strcmp(str, "short") || !
|| !strcmp(str, "void") || !strcmp(str, "static") || !strcmp(str, "struct") ||
|| !strcmp(str, "void") || !strcmp(str, "static") || !strcmp(str, "struct") ||
return (true);
return (false);
}
bool isValidInteger(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
&& str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9' || (str[
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[
&& 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;
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 (isValidDelimiter(str[right]) == false)
right++;
if (isValidDelimiter(str[right]) == true && left == right) {
if (isValidOperator(str[right]) == true)
printf("Valid operator : '%c'\n", str[right]);
right++;
right++;
left = right;
} else if (isValidDelimiter(str[right]) == true && left != right || (right ==
char* subStr = subString(str, left, right ‐ 1);
if (isValidKeyword(subStr) == true)
printf("Valid keyword : '%s'\n", subStr);
else if (isValidInteger(subStr) == true)
printf("Valid Integer : '%s'\n", subStr);
else if (isRealNumber(subStr) == true)
printf("Real Number : '%s'\n", subStr);
else if (isvalidIdentifier(subStr) == true
&& isValidDelimiter(str[right ‐ 1]) == false)
printf("Valid Identifier : '%s'\n", subStr);
else if (isvalidIdentifier(subStr) == false
&& isValidDelimiter(str[right ‐ 1]) == false)
printf("Invalid Identifier : '%s'\n", subStr);
left = right;
}
}
return;
}
int main(){
char str[100] = "float x = a + 1b; ";
printf("The Program is : '%s' \n", str);
printf("All Tokens are : \n");
detectTokens(str);
return (0);
}
Output
The Program is : 'float x = a + 1b; '
All Tokens are :
Valid keyword : 'float'
Valid Identifier : 'x'
Valid operator : '='
Valid Identifier : 'a'
Valid operator : '+'
Invalid Identifier : '1b'
sudhir sharma
Updated on 17Jul2020 12:54:18
Related Questions & Answers
C program to print string tokens
C/C++ Tokens?
Tokens in C
Explain C tokens in C Language
What are tokens in C#?
Bag of Tokens in C++
What are the C Tokens?
Java Program to Detect loop in a LinkedList
What are the tokens in C ?
Tokens vs Identifiers vs Keywords in C++
Python Program to Detect the Cycle in a Linked List
How to detect integer overflow in C/C++?
C/C++ program to shutdown a system?
What do you mean by C++ Tokens?
How to launch a program using C++ program?
Previous Page Print Page Next Page
Advertisements
About us Refund Policy Terms of use Privacy Policy FAQ's
Contact
© Copyright 2022. All Rights Reserved.