একটি সিম্পল লেক্সিকাল অ্যানালাইজার তৈরি করা একটি মজার প্রকল্প যা প্রোগ্রামিং ভাষার লেক্সিক্যাল কাঠামো বোঝার জন্য সহায়ক। এখানে একটি মৌলিক লেক্সিকাল অ্যানালাইজার তৈরি করার পদক্ষেপ তুলে ধরা হলো। এই উদাহরণটি Python ব্যবহার করে তৈরি করা হবে।
ধাপ ১: ইনপুট এবং টোকেন সংজ্ঞায়িত করা
প্রথমে, আমাদের কিছু মৌলিক টোকেন এবং নিয়ম সংজ্ঞায়িত করতে হবে। ধরুন আমরা একটি সিম্পল গাণিতিক ভাষা তৈরি করছি যেখানে +, -, *, / অপারেটর এবং ভেরিয়েবল ও সংখ্যা রয়েছে।
ধাপ ২: কোড লেখা
import re
# টোকেনের ধরন
TOKEN_TYPES = [
('NUMBER', r'\d+'), # সংখ্যা
('PLUS', r'\+'), # যোগ
('MINUS', r'-'), # বিয়োগ
('MULTIPLY', r'\*'), # গুণ
('DIVIDE', r'/'), # ভাগ
('IDENTIFIER', r'[a-zA-Z_]\w*'), # ভেরিয়েবল নাম
('WHITESPACE', r'\s+'), # ফাঁকা স্থান
]
# সমস্ত টোকেন নিয়মকে একত্রিত করুন
TOKEN_REGEX = '|'.join(f'(?P<{pair[0]}>{pair[1]})' for pair in TOKEN_TYPES)
def tokenize(code):
tokens = []
for match in re.finditer(TOKEN_REGEX, code):
token_type = match.lastgroup
token_value = match.group(token_type)
if token_type != 'WHITESPACE': # ফাঁকা স্থান বাদ দিন
tokens.append((token_type, token_value))
return tokens
# টেস্ট কোড
if __name__ == "__main__":
code = "x = 10 + 20 - 5 * 3 / 4"
tokens = tokenize(code)
for token in tokens:
print(token)
ধাপ ৩: কোডের ব্যাখ্যা
টোকেনের ধরন: আমরা বিভিন্ন ধরনের টোকেনের জন্য নিয়ম সংজ্ঞায়িত করেছি, যেমন সংখ্যা, অপারেটর, এবং ভেরিয়েবল নাম।
টোকেনাইজেশন ফাংশন: tokenize ফাংশন ইনপুট কোডের সমস্ত টোকেন খুঁজে বের করে এবং সেগুলিকে একটি তালিকায় রাখে। এটি re মডিউল ব্যবহার করে নিয়মিত এক্সপ্রেশন দিয়ে টোকেনগুলিকে ম্যাচ করে।
ফাঁকা স্থান বাদ দেওয়া: WHITESPACE টোকেনগুলি তালিকা থেকে বাদ দেওয়া হয়, কারণ সেগুলি আমাদের প্রয়োজন নেই।
টেস্ট কোড: আমরা একটি নমুনা গাণিতিক এক্সপ্রেশন ব্যবহার করে টোকেনাইজারকে পরীক্ষা করছি।
ফলাফল
এই কোডটি চালানোর পর, আপনি নিচের মতো আউটপুট পাবেন:
('IDENTIFIER', 'x')
('NUMBER', '10')
('PLUS', '+')
('NUMBER', '20')
('MINUS', '-')
('NUMBER', '5')
('MULTIPLY', '*')
('NUMBER', '3')
('DIVIDE', '/')
('NUMBER', '4')
উপসংহার
এটি একটি সিম্পল লেক্সিকাল অ্যানালাইজার তৈরির মৌলিক উদাহরণ। আপনি এই অ্যানালাইজারটিকে আরো উন্নত করতে পারেন, যেমন মন্তব্য, সঠিকতা যাচাই, এবং এর আউটপুটের গঠন পরিবর্তন করে। এই প্রকল্পটি লেক্সিক্যাল বিশ্লেষণ এবং প্রোগ্রামিং ভাষার সামগ্রিক ধারণা বোঝার জন্য একটি দুর্দান্ত উপায়।
Read more