यहां, हम 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'