در زبان C یک برنامه بنویسید که یک خط کد ساده (حاوی شناسهها، اعداد صحیح و عملگرهای + - * / و پرانتز) را دریافت کند و با استفاده از توابع ctype.h آن را به توکنهای مجزا چاپ کند.
11.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:55رشته ورودی را با یک بافر ثابت (مثلاً با fgets) بخوانید و با پیمایش کاراکترها با استفاده از توابع ctype.h مانند isspace، isalpha، isdigit و isalnum توکنها را جدا کنید: اگر کاراکتر حرف یا '_' بود، تا زمانی که isalnum یا '_' برقرار است شناسه بسازید؛ اگر رقم بود، تا پایان پیاپی ارقام عدد را جمعآوری کنید؛ و اگر یکی از عملگرها یا پرانتزها بود، آن را بهعنوان توکن منفرد چاپ کنید. برای ذخیره موقت توکنها از یک آرایه کاراکتری کوچک استفاده کنید و با درج '\0' رشتهها را پایاندهی کنید. نکات: از کنترل اندازه بافر و بررسی '\0' جلوگیری از overflow را فراموش نکنید، برای خواندن خط از fgets استفاده کنید و هنگام توسعه از پیامهای خطا و کامپایل با -Wall بهره ببرید؛ این الگوریتم شبیه یک لغتنگار (lexer) ساده در حوزهٔ Compilers/Interpreters است و میتواند با افزودن حالات بیشتر گسترش یابد.
این رویکرد یک lexer ساده در زبان C است که با fgets ورودی را میخواند و با توابع ctype.h توکنها را تفکیک میکند. در هر شناسه، از آغاز با حروف یا '_' شروع میشود و تا زمانی که کاراکترهای alnum یا '_' وجود دارند، شناسه را میسازد. اعداد صحیح بهطور پیوسته جمعآوری میشوند و کاراکترهای '+', '-', '*', '/', و پرانتزها بهعنوان توکنهای جداگانه چاپ میشوند. برای بهبود کارایی و ایمنی میتوانید اندازهٔ بافر را بهدقت کنترل کنید، خطاهای ورودی را مدیریت کنید و امکان توسعه به توکنهای بیشتر را در نظر بگیرید.
گزارش