به شما این فرصت داده شده است که برای 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 از کروشهها برای جانشینی دستور.، حتی درون رشتههای داخل گیومهی دوگانه، استفاده میکند، باید در فرار دادن کروشههای باز احتیاط کنید.
بهجز متغیرهای آرایهی انجمنی، پرانتزها صرفاً کاراکترهای معمولی هستند.