Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम में C प्रोग्राम में टोकन का पता लगाने के लिए


यहां, हम C प्रोग्राम में टोकन का पता लगाने के लिए एक C प्रोग्राम बनाएंगे। इसे कंपाइलर का लेक्सिकल विश्लेषण चरण कहा जाता है। लेक्सिकल विश्लेषक कंपाइलर का वह हिस्सा है जो प्रोग्राम के टोकन का पता लगाता है और इसे सिंटैक्स विश्लेषक को भेजता है।

टोकन कोड की सबसे छोटी इकाई है, यह या तो एक कीवर्ड, पहचानकर्ता, स्थिरांक, स्ट्रिंग लिटरल, प्रतीक है।

C में विभिन्न प्रकार के टोकन के उदाहरण।

उदाहरण

कीवर्ड: for, if, include, आदि पहचानकर्ता: चर, फ़ंक्शन, आदि विभाजक: ',', ';', आदि ऑपरेटर: '-', '=', '++', आदि

C प्रोग्राम में टोकन का पता लगाने का प्रोग्राम-

उदाहरण

#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); } // 'सत्य' लौटाता है यदि स्ट्रिंग एक वैध पहचानकर्ता है। 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(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 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] != '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;     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("वैध ऑपरेटर: '%c'\n", str[right]);             right++;             left = right;         } else if (isValidDelimiter(str[right]) == true && left != right || (right == length && left != right)) {             char* subStr = subString(str, left, right - 1);             if (isValidKeyword(subStr) == true)                 printf("वैध कीवर्ड: '%s'\n", subStr);             else if (isValidInteger(subStr) == true)                 printf("वैध पूर्णांक: '%s'\n", subStr);             else if (isRealNumber(subStr) == true)                 printf("वास्तविक संख्या: '%s'\n", subStr);             else if (isvalidIdentifier(subStr) == true && isValidDelimiter(str[right - 1]) == false)                 printf("वैध पहचानकर्ता: '%s'\n", subStr);             else if (isvalidIdentifier(subStr) == false && isValidDelimiter(str[right - 1]) == false)                 printf("अवैध पहचानकर्ता: '%s'\n", subStr);             left = right;         }     }     return; } int main(){     char str[100] = "float x = a + 1b; ";     printf("प्रोग्राम है: '%s' \n", str);     printf("सभी टोकन हैं: \n");     detectTokens(str);     return (0); }

आउटपुट

प्रोग्राम है: 'float x = a + 1b; ' सभी टोकन हैं: वैध कीवर्ड: 'float' वैध पहचानकर्ता: 'x' वैध ऑपरेटर: '=' वैध पहचानकर्ता: 'a' वैध ऑपरेटर: '+' अवैध पहचानकर्ता: '1b'
  1. C प्रोग्राम: षट्कोणीय पैटर्न प्रिंट करना C प्रोग्राम: षट्कोणीय पैटर्न प्रिंट करना

    षट्कोणीय पैटर्न दिए गए पूर्णांक n के लिए, हम तारक (*) का उपयोग करके एक षट्कोणीय पैटर्न प्रिंट करते हैं। पैटर्न तीन भागों में विभाजित होता है: ऊपरी भाग - त्रिकोणीय शीर्ष मध्य भाग - समानांतर भुजाएं निचला भाग - त्रिकोणीय तल उदाहरण इनपुट: n = 5 * * * * * * * * * * * *

  1. C प्रोग्राम: समानांतर चतुर्भुज की परिधि ज्ञात करना C प्रोग्राम: समानांतर चतुर्भुज की परिधि ज्ञात करना

    समानांतर चतुर्भुज (Parallelogram) क्या है? एक समानांतर चतुर्भुज एक चतुर्भुज है जिसके: विपरीत भुजाएं समानांतर होती हैं विपरीत कोण समान होते हैं विकर्ण एक-दूसरे को द्विभाजित करते हैं परिधि/परिमाप सूत्र यदि भुजाएं a और b हैं, तो: परिधि = 2(a + b) = 2a + 2b उदाहरण भुजा aभुजा bपरिधि 231270.00 16.

  1. पायथन प्रोग्राम: निर्देशित ग्राफ में चक्र का पता लगाएं पायथन प्रोग्राम: निर्देशित ग्राफ में चक्र का पता लगाएं

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक निर्देशित ग्राफ दिया गया है, हमें जांचना है कि ग्राफ में चक्र है या नहीं। आउटपुट सच होना चाहिए यदि दिया गया ग्राफ कम से कम एक चक्र रखता है, अन्यथा गलत। उदाहरण # collections मॉड्यूल from collections import defaultdict # ग्र