C প্রোগ্রামের টোকেন (কীওয়ার্ড, আইডেন্টিফায়ার, কনস্ট্যান্ট, সিম্বল ইত্যাদি) ডিটেক্ট করার প্রোগ্রাম। এটি কম্পাইলারের লেক্সিক্যাল অ্যানালাইসিস ফেজের নমুনা।
টোকেন টাইপ
- Keywords: for, if, include, int, return...
- Identifiers: variables, functions...
- Separators: , ; ( ) [ ] { }
- Operators: + - * / = > < ++ --
- Constants: integers, real numbers
পদ্ধতি
- isValidDelimiter(), isValidOperator(), isvalidIdentifier(), isValidKeyword(), isValidInteger(), isRealNumber() হেল্পার ফাংশন।
- detectTokens() ফাংশন স্ট্রিং স্ক্যান করে ডিলিমিটার পেলে সাবস্ট্রিং বের করে টোকেন টাইপ চেক করে প্রিন্ট করে।
C প্রোগ্রাম উদাহরণ (সংক্ষিপ্ত)
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
bool isValidDelimiter(char ch) { /* চেক */ }
bool isValidOperator(char ch) { /* চেক */ }
bool isvalidIdentifier(char* str) { /* চেক */ }
bool isValidKeyword(char* str) { /* strcmp দিয়ে কীওয়ার্ড চেক */ }
bool isValidInteger(char* str) { /* সব ডিজিট কিনা চেক */ }
bool isRealNumber(char* str) { /* ডেসিমাল পয়েন্ট চেক */ }
char* subString(char* str, int left, int right) { /* সাবস্ট্রিং এক্সট্র্যাক্ট */ }
void detectTokens(char* str) {
int left=0, right=0, len=strlen(str);
while (right <= len && left <= right) {
if (!isValidDelimiter(str[right])) right++;
else if (isValidDelimiter(str[right]) && left==right) {
if (isValidOperator(str[right])) printf("Valid operator: '%c'\n", str[right]);
right++; left=right;
} else {
char* sub = subString(str, left, right-1);
if (isValidKeyword(sub)) printf("Valid keyword: '%s'\n", sub);
else if (isValidInteger(sub)) printf("Valid Integer: '%s'\n", sub);
else if (isRealNumber(sub)) printf("Real Number: '%s'\n", sub);
else if (isvalidIdentifier(sub)) printf("Valid Identifier: '%s'\n", sub);
else printf("Invalid Identifier: '%s'\n", sub);
left = right;
}
}
}
int main() {
char str[100] = "float x = a + 1b; ";
printf("Program: '%s'\nTokens:\n", str);
detectTokens(str);
return 0;
}
আউটপুট
Program: 'float x = a + 1b; ' Tokens: Valid keyword: 'float' Valid Identifier: 'x' Valid operator: '=' Valid Identifier: 'a' Valid operator: '+' Invalid Identifier: '1b'