مسیرها
/
Tcl
Tcl
/
تمرین‌ها
/
تطبیق پرانتزها
تطبیق پرانتزها

تطبیق پرانتزها

آسان

مقدمه

به شما این فرصت داده شده است که برای Bracketeer™ نرم‌افزار بنویسید؛ یک مین‌فریم باستانی اما قدرتمند. نرم‌افزاری که روی آن اجرا می‌شود به زبانی اختصاصی نوشته شده است. بخش زیادی از نحوه‌ی نگارش آن آشناست، اما می‌بینید که کروشه، آکولاد و پرانتز زیادی وجود دارد. با اینکه Bracketeer™ قدرتمند است، انعطاف‌پذیری ندارد. اگر کد منبع کروشه، آکولاد یا پرانتز نامتوازنی داشته باشد، Bracketeer™ از کار می‌افتد و باید دوباره راه‌اندازی شود. برای پرهیز از چنین وضعیتی، شروع می‌کنید به نوشتن کدی که بتواند پیش از تلاش برای اجرای آن روی Bracketeer™ بررسی کند که کروشه‌ها، آکولادها و پرانتزها متوازن هستند.

دستورالعمل‌ها

یک رشته در نظر بگیرید که شامل کروشه []، آکولاد {}، پرانتز () یا هر ترکیبی از این‌هاست؛ بررسی کنید که همه‌ی جفت‌ها به‌درستی با هم تطبیق داده شده و تودرتو باشند. سایر نویسه‌ها باید نادیده گرفته شوند. برای مثال، "{what is (42)}?" «متوازن» است و "[text}" متوازن نیست.

Tcl یک زبان بسیار ساده است، اما شیوه‌ای که مفسر code را تجزیه می‌کند چند حالت مرزی مشکل‌ساز دارد.

آکولاد

آکولاد در Tcl صرفاً روشی برای نقل‌قول کردن یک بلوک متن است؛ این متن ممکن است به‌عنوان code یا داده تفسیر شود. درون آکولادها، آکولادهای تودرتو می‌توانند ظاهر شوند، اما این آکولادهای تودرتو باید متوازن باشند. صفحه‌ی راهنمای Tcl این را می‌گوید:

آکولادها درون کلمه تودرتو می‌شوند: برای هر آکولاد باز اضافی باید یک آکولاد بسته‌ی اضافی وجود داشته باشد (البته اگر آکولاد باز یا بسته‌ای درون کلمه با بک‌اسلش نقل‌قول شده باشد، در یافتن آکولاد بسته‌ی متناظر شمرده نمی‌شود).

عبارت‌بندی آنجا کاملاً دقیق است: اگر می‌خواهید کاراکتر آکولاد باز یا بسته‌ی بدون متناظر داشته باشید، باید با بک‌اسلش نقل‌قول شود. پس این کار را نکنید:

proc isOpenBrace {char} {
    return [expr {$char eq "{"}]
    # ......................^ will not work
}

باید این کار را بکنید

proc isOpenBrace {char} {
    return [expr {$char eq "\{"}]
    # ......................^^ will work
}

این می‌تواند مشکل‌ساز باشد، چون Tcl کامنت‌ها را به شیوه‌ای متفاوت از بیشتر زبان‌ها تجزیه می‌کند. بحث بیشتری در ویکی Tcl هست.

کروشه

به‌طور مشابه، چون Tcl از کروشه‌ها برای جانشینی دستور.، حتی درون رشته‌های داخل گیومه‌ی دوگانه، استفاده می‌کند، باید در فرار دادن کروشه‌های باز احتیاط کنید.

پرانتز

به‌جز متغیرهای آرایه‌ی انجمنی، پرانتزها صرفاً کاراکترهای معمولی هستند.


منبع

Ginna Baker
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Tcl Exercism

آماده‌اید تطبیق پرانتزها را شروع کنید؟

در Exercism ثبت‌نام کنید تا Tcl را همراه با 135 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.