Yacc ব্যবহার করে সিনট্যাক্স অ্যানালাইসার তৈরি করা

কম্পাইলার নির্মাণ টুলস - কম্পাইলার ডিজাইন (Compiler Design) - Computer Science

191

Yacc ব্যবহার করে সিনট্যাক্স অ্যানালাইজার তৈরি করা

Yacc (Yet Another Compiler Compiler) হল একটি জনপ্রিয় টুল যা সিনট্যাক্স বিশ্লেষক (পার্সার) তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত লেক্সিকাল অ্যানালাইজারের সাথে একত্রে কাজ করে। Yacc-এ ব্যবহারকারী একটি গ্রামার ফাইল তৈরি করে যা টোকেনের কাঠামো এবং সম্পর্ক নির্ধারণ করে। নিচে Yacc ব্যবহার করে একটি মৌলিক সিনট্যাক্স অ্যানালাইজার তৈরি করার পদক্ষেপগুলো আলোচনা করা হলো।


পদক্ষেপ ১: Yacc ইনস্টলেশন

প্রথমে নিশ্চিত করুন যে আপনার সিস্টেমে Yacc ইনস্টল করা আছে। এটি সাধারণত Linux/Unix সিস্টেমে পূর্বনির্ধারিত থাকে। ইনস্টল করতে, আপনি আপনার প্যাকেজ ম্যানেজার ব্যবহার করতে পারেন:

sudo apt-get install bison  # Yacc-এর একটি সংস্করণ

পদক্ষেপ ২: Yacc ফাইল তৈরি

একটি .y এক্সটেনশনের ফাইল তৈরি করুন। উদাহরণস্বরূপ, parser.y নামে একটি ফাইল তৈরি করুন।

%{
#include <stdio.h>
#include <stdlib.h>
%}

%token INTEGER  // টোকেন ঘোষণা
%token PLUS MINUS TIMES DIVIDE  // অপারেটর টোকেন

%%

// সিনট্যাক্স নিয়ম এখানে লিখুন
input:
    | input expr '\n' { printf("Result: %d\n", $2); }
    ;

expr:
    INTEGER { $$ = $1; }  // একটি পূর্ণসংখ্যা
    | expr PLUS expr { $$ = $1 + $3; }
    | expr MINUS expr { $$ = $1 - $3; }
    | expr TIMES expr { $$ = $1 * $3; }
    | expr DIVIDE expr { $$ = $1 / $3; }
    ;

%%

// প্রধান ফাংশন
int main(void) {
    printf("Enter expressions:\n");
    yyparse(); // পার্সারকে কল করা
    return 0;
}

// Yacc ডিফল্ট yyerror ফাংশন
void yyerror(const char *s) {
    fprintf(stderr, "Error: %s\n", s);
}

পদক্ষেপ ৩: Lex ফাইল তৈরি

এখন, আমরা একটি Lex ফাইল তৈরি করব যাতে Yacc কে ইনপুট টোকেন পাঠানো হয়। উদাহরণস্বরূপ, lexer.l নামে একটি ফাইল তৈরি করুন।

%{
#include "y.tab.h" // Yacc-generated header file
%}

%%

// নিয়ম এখানে লিখুন
[0-9]+      { yylval = atoi(yytext); return INTEGER; }
"+"        { return PLUS; }
"-"        { return MINUS; }
"*"        { return TIMES; }
"/"        { return DIVIDE; }
[ \t]+     ; // whitespace গুলো উপেক্ষা করা হবে
\n         { return '\n'; }
.          { printf("Unknown character: %s\n", yytext); }

// EOF হ্যান্ডলিং
%%

// মেইন ফাংশন
int yywrap() {
    return 1;
}

পদক্ষেপ ৪: Yacc এবং Lex ফাইল কম্পাইল করা

Yacc এবং Lex ফাইলগুলি কম্পাইল করতে নিচের কমান্ডগুলি ব্যবহার করুন:

bison -d parser.y  # Yacc ফাইল কম্পাইল করা
flex lexer.l        # Lex ফাইল কম্পাইল করা
gcc lex.yy.c parser.tab.c -o parser -lfl  # উভয় কম্পাইল করা

পদক্ষেপ ৫: সিনট্যাক্স অ্যানালাইজার চালানো

অতঃপর, আপনার সিনট্যাক্স অ্যানালাইজারটি চালান:

./parser

এখন আপনি কিছু গণনা করে দেখুন, যেমন

3 + 5 7 * 2

এটি আপনার ইনপুটের ফলাফল বের করবে, যেমন:

Result: 8
Result: 14

উপসংহার

Yacc এবং Lex ব্যবহার করে একটি মৌলিক সিনট্যাক্স অ্যানালাইজার তৈরি করার প্রক্রিয়া এইভাবে সম্পন্ন হয়। আপনি সিনট্যাক্স নিয়মগুলি পরিবর্তন এবং নতুন নিয়ম যুক্ত করে অ্যানালাইজারের কার্যকারিতা বাড়াতে পারেন। এটি প্রোগ্রামিং ভাষার বিশ্লেষণের জন্য একটি গুরুত্বপূর্ণ পদক্ষেপ এবং কম্পাইলার নির্মাণের প্রাথমিক অংশ।

Content added By
Promotion

Are you sure to start over?

Loading...