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

WWW Tutorialspoint Com C Program To Detect Tokens in A C Program

Uploaded by

Planet
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

WWW Tutorialspoint Com C Program To Detect Tokens in A C Program

Uploaded by

Planet
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

  

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 17­Jul­2020 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.

You might also like