در طراحی زبان رایانه ای، قطع کردن(به انگلیسی: stropping) روشی است که توالی ای از حروف را به داشتن خاصیتی ویژه مانند واژه رزروشده، نوع خاصی از متغیر یا مکان حافظه علامت گذاری میکند و به این ترتیب فضای نام متفاوتی از اسمهای معمولی (شناساگرها) خواهند داشت تا از مشابهت غلط آنها جلوگیری شود. این روش در بیشتر زبانهای مدرن استفاده نمیشود - به جای آن کلمات کلیدی، کلمات رزرو شده هستند و نمیتوان به عنوان شناساگر از آنها استفاده کرد. استروپینگ اجازه میدهد تا از همان دنباله حروف هم به عنوان کلمات کلیدی و هم به عنوان شناساگر استفاده کرد، و به این ترتیب عمل تجزیه را سادهتر میکند. برای مثال اجازه میدهد نام متغیری if باشد، بدون اینکه با کلمه کلیدی if تداخل داشته باشد. استروپینگ در درجه اول در دهه ۱۹۶۰ با الگول و زبانهای مرتبط همراه بود. اگرچه این روش استفادههای مدرن دارد، اما با سایر تکنیکهای مشابه که از نظر ظاهری شباهت زیادی دارند، به راحتی اشتباه گرفته میشود.
روش قطع کردن در توسعه الگول در دهه ۱۹۶۰ پدید آمد که از آن برای تمایزهای تایپی مختلف (boldface و underline) استفاده میشد که در زبان نشر استفاده میشدهاست و نمیتواند مستقیماً در زبان سختافزاری نشان داده شود. یک ماشینتحریر میتواند دارای نویسههای bold باشد، اما در مورد کدگذاری در کارتهای پانچ، هیچ کاراکتر Boldای وجود ندارد. اصطلاح «قطع کردن» در الگول ۶۰، از اپاستروف به وجود آمد، زیرا برخی از پیاده سازیهای الگول ۶۰ از آپوستروفها در اطراف متن استفاده میکردند تا نشان دهندهٔ مهم بودن آن باشند.[۱] برای مثال 'if'
نشان دهندهٔ کلمهٔ کلیدی «اگر» است. این روش در الگول۶۸ نیز بسیار مهم است، که در آن روشهای مختلف بریدن، معروف به رژیمهای بریدن(stropping regimes)، استفاده شدهاست. آپاستروفهای اصلی الگول ۶۰ بهطور گسترده مورد استفاده قرار نگرفت در صورتی که حروف بزرگ بیشتر رایج بود.[۲] مانند .IF
و IF
که روش بریدن برای همهٔ اینها اعمال میشود.
گسترهٔ وسیعی از دستور زبانهای مختلف برای قطع کردن استفاده شدهاست:
'BEGIN'
یا ‘BEGIN’
).BEGIN'
)[۴]در حقیقت، اغلب اینگونه است که چندین قرارداد قطع کردن ممکن است در یک زبان مورد استفاده قرار گیرد. به عنوان مثال، در الگول۶۸ انتخاب بین "بریدن"های مختلف را میتوان با یک دستورالعمل کامپایلر (عملگر در واژهشناسی الگول) که به صورت "نقطه" (POINT)، "بالایی"(UPPER)، "نقل و قول"(QUOTE) یا "عطف به"(RES) نامیده میشوند، انتخاب کرد.
FOR.
- یک قرارداد مشابه در FORTRAN 77 استفاده شدهاست، که در آن کلمات کلیدی منطقی به عنوان .EQ.
و … قطع میشوند.FOR
- با حروف کوچک که برای شناسههای معمولی استفاده میشوند.'for'
استفاده شدهاست.for
رزرو شدهاست و برای شناسههای معمولی در دسترس نیست.نظامهای مختلف قواعد یک ویژگی واژگانی برای کاراکترهای منقطع شده (stropped) هستند، هر چند در برخی موارد، این تفسیرها، تفاسیر سادهای دارند: در آپاستروف تنها(single apostrophe) و نظام نقطهای، اولین کاراکتر به عنوان یک کاراکتر فرار عمل میکند، در حالی که در نظامهای آپاستروف، به عنوان حائل عمل میکنند. مثال دیگر: برنامههای ALGOL 68RS حتی در یک پردازنده یک زبان نیز میتوانند از چندین نوع روش قطع کردن استفاده کنند.
توجه داشته باشید به دستورالعمل پیشرو pr (مخفف pragmat)، که خود به سبک نقطه یا نقل قول قطع میشوند، و همچنین ¢
برای کامنت (از "2¢
") تنظیم شدهاست - به الگول ۶۸: عناصر مهم زبانی مراجعه کنید.
الگول ۶۸ با استفاده از قطع کردن
به روش عطف به (کلمات رزرو شده) |
برای کامپایلر کد کاراکتر ۶ بیتی | برای کامپایلر کد کاراکتر ۷ بیتی | قطع کردن به روش نقل قول
(مانند wikitext) |
الگول ۶۸ "سخت"
نسخه معمولی منتشر شده |
---|---|---|---|---|
PR RES .PR. ;mode .xint = int ;xint sum sq:=0. for i while sum sq≠70×70 do sum sq+:=i↑2 od |
PR POINT .PR. ;MODE .XINT = .INT. ;XINT SUM SQ:=0. FOR I .WHILE. SUM SQ .NE 70*70 DO. SUM SQ .PLUSAB I .UP 2 OD. |
PR UPPER .PR. ;MODE XINT = INT ;XINT sum sq:=0 FOR i WHILE sum sq/=70*70 DO sum sq+:=i**2 OD |
'pr' quote 'pr' ;'mode' 'xint' = 'int' ;'xint' sum sq:=0 'for' i 'while' sum sq≠70×70 'do' sum sq+:=i↑2 'od' |
underline or ¢ ¢ bold typeface ;mode xint = int ;xint sum sq:=0 for i while sum sq≠70×70 do sum sq+:=i↑2 od |
به دلایل مختلف فورترن۷۷ دارای این مقادیر "منطقی" و عملگرها است: .TRUE., .FALSE., .EQ., .NE., .LT., .LE., .GT., .GE., .EQV., .NEQV., .OR., .AND., .NOT.[۵]
.AND., .OR. و .XOR. همچنین در تستهای ترکیبی در عبارتهای IF
و IFF
در پروندههای دسته ای که تحت پردازندههای خط فرمان JP Software مانند 4DOS ,[۶] 4OS2 و 4NT / Take Command اجرا میشوند، استفاده شدهاند.
اکثر زبانهای مدرن کامپیوتر از روش قطع کردن (stropping) استفاده نمیکنند، با دو استثنا قابل توجه:
استفاده از زبانهای زیادی در Microsoft's .NET Common Language Infrastructure (CLI) به روشی برای استفاده از متغیرها به زبانی متفاوت نیاز دارد که ممکن است در یک زبان مکالمه کلمات کلیدی باشند. این کار گاهی اوقات با پیشوندهایی مانند @
در #c یا شناسه در براکتها در ویژوال بیسیک داتنت انجام میشود.
دومین نمونه مهم در بسیاری از پیادهسازیهای ساختار، جستجوی زبان است. در این زبانها کلمات محفوظ با محدود کردن واژگان از آنها به عنوان ستون، جدول یا نام متغیر قابل استفاده هستند. به صورت استاندارد کلمات محصور شده با " " مشخص میشوند اما در عمل مکانیسم دقیق با اجرا تغییر میکند؛ برای مثال، مایاسکیوال
اجازه میدهد که واژههای رزرو شده در زمینههای دیگر با استفاده از محصور کردن آنها توسط backticks انجام شود یا مایکروسافت اسکیوال سرور از براکتهای مربعی استفاده میکند.
قطع کردن(stropping) نیز میتوانند در زبان برنامهنویسی Nim مورد استفاده قرار گیرند. در زبان Nim کلمه رزرو شده میتواند به عنوان یک شناسه با ضمیمه کردن آن در براکت استفاده شود.
نمونههای دیگری نیز وجود دارند. برای مثال، Web IDL از یک زیرخط _
برای نشانهگذاری شناسهها استفاده میکند که در غیر این صورت با کلمات محفوظ برخورد میکند.[۷]
در ابتدا در کامپایلر، قطع نکردن (unstropping) در طول مرحله بازسازی خط اول رخ میداد، که همچنین فضاهای خالی را نیز از بین میبرد. پس از آن تجزیه و تحلیل بدون اسکنر (بدون نشانه گذاری) دنبال شد که در دهه ۱۹۶۰، برای الگول استاندارد بود. در استفاده مدرن، قطع نکردن(unstropping) به عنوان بخشی از تحلیل واژگانی انجام میشود. یک امر واضح این است اگر فرد واژگان را به دو مرحله اسکنر و ارزیاب متمایز کند: اسکنر رشته قطع شده(stropped) را در طبقهبندی به درستی دستهبندی میکند و سپس ارزیاب هنگام محاسبه مقدار از تکنیک جدانکردن (unstrops) استفاده میکند. به عنوان مثال، در زبانی که زیرخط _
در اول کلمه برای بریدن شناسهها برای جلوگیری از برخورد با کلمات محفوظ استفاده میشود، دنباله if_
به عنوان یک شناسه (نه به عنوان کلمه رزرو شده در صورت) توسط اسکنر طبقهبندی میشود سپس ارزیاب این مقدار را به عنوان نوع-نشانه (شناسه، اگر)
مقدار خواهد داد.
تعدادی روش مشابه وجود دارند که بهطور کلی با پیشوند یا پسوند گذاری شناسه، برخوردهای مختلف با آن را نشان دهند ولی از لحاظ مفهوم با یکدیگر متفاوتند. بهطور دقیق قطع کردن (stropping) متشکل از نمایشهای مختلف برای یک اسم، در فضاهای نام متفاوت است و در مرحله نشان گذاری کردن رخ میدهد.
از حروف بزرگ برای کلمات کلیدی همچنان به عنوان یک قرارداد برای نوشتن دستور زبان برای واژگان و تجزیه استفاده میشود - علامت گذاری کلمه رزرو شده به عنوان کلاس نشانگر IF، و سپس بیان عبارت "if-then-else" با IF Expression THEN Statement ELSE Statement
که در آن اصطلاحهای با حروف بزرگ کلمات کلیدی هستند و اصطلاحاتی که فقط حرف اول آنها بزرگ است نمادهای غیر پایانی در یک قاعده تولید هستند (نمادهای پایانی با حروف کوچک مشخص میشوند).
ممکن است از قراردادهای نامگذاری برای جلوگیری از تصادم استفاده شود که به صورت معمول از زیرخط پیشوند یا پسوند استفاده میشود. زیرخط پیشوندی اغلب برای نشان دادن اعضای خصوصی در برنامهنویسی شی گرا استفاده میشود. این اسامی ممکن است توسط کامپایلر تفسیر شوند و تأثیراتی داشته باشند، هرچند این کار معمولاً در مرحله تجزیه و تحلیل معنایی انجام میشود، نه مرحله نشانه گذاری. به عنوان مثال، در پایتون، یک زیرخط پیشوندی، یک شاخص خصوصی ضعیف است، در حالی که دو زیرخط برجسته روی یک ویژگی کلاس، دستکاری نام را نشان میدهد.[۸]
زبانهای مدرن بهطور کلی از واژههای رزرو شده به جای قطع کردن (stropping) برای تمایز کلمات کلیدی از شناسهها به عنوان کلمات کلیدی استفاده میکنند. این برجستهترین قسمت در زبان C است، در جایی که شناسهها از شناسههایی که از زیرخط (underscore) شروع میشوند جداست، اگرچه جزئیات دقیق شناسه در یک دامنه محفوظ است.[۹] بهطور مشابه در ++C هر شناسه ای که حاوی دو زیرخط باشد برای هرگونه استفاده محفوظ است، در حالی که شناسهای که با تأکید زیر شروع میشود در فضای جهانی محفوظ است؛ بنابراین میتوان با استفاده از کلمه رزرو شده foo__
کلمه کلیدی جدید foo
را اضافه کرد. در حالی که این از نظر سطحی شبیه به قطع کردن (stropping) است، معنیشناسی متفاوتی دارند. به عنوان یک کلمه محفوظ، رشته foo__
شناسه foo__
را در فضای نام شناسه مشترک نشان میدهد. در قطع کردن(Stropping) (با پیشوند کلمات کلیدی توسط __
)، رشته foo__
کلمه کلیدی foo
را در یک نام جداگانه برای کلید واژهها نشان میدهد؛ بنابراین با استفاده از کلمات رزرو شده، علائم foo__
و foo
(شناسه، foo__) و (شناسه، foo) - مقادیر مختلفی در همان دسته هستند - در حالی که در تکنیک قطع کردن(stropping) نشانههای foo__
و foo
(کلمه کلیدی، foo) و (شناسه، foo) - مقادیر یکسان در دستههای مختلف. این مسئله همان مشکل برخورد فضای نام را به گونهای حل میکند که برای یک برنامهنویس نیز یکسان است، اما از نظر دستور زبان و اجرای رسمی تفاوت دارد.
یک پدیده نحو مشابه اما از نظر معنایی متفاوت امضاءها هستند که در عوض خصوصیات متغیرها را نشان میدهد. این موارد در پرل(Perl)، روبی (Ruby) و زبانهای مختلف دیگر برای شناسایی ویژگیهای متغیرها / ثابتها مشترک است:در Perl برای تعیین نوع متغیر و در Ruby برای تشخیص متغیرها از ثابت و نشان دادن دامنه. توجه داشته باشید تکنیک معناشناختی متغیر را تحت تأثیر قرار میدهد، نه نحو بودن این که آیا آن یک شناسه یا کلمه کلیدی است.
قطع کردن (stropping) در زبانهای برنامهنویسی رایانه ای مورد استفاده قرار میگیرد تا کار کامپایلر (یا به عبارت دقیق تر پارسر) آسانتر شود؛ یعنی در توانایی رایانههای نسبتاً کوچک و کند در دسترس در روزهای اولیه محاسبات در قرن بیستم باشد. با این حال، روشهای مشابه برای کمک به درک مطلب برای افراد نیز بهطور معمول مورد استفاده قرار میگیرند. برخی از نمونهها عبارتند از:
More serious problems are posed by "stropping", the technique used to distinguish boldface text from roman text. Some implementations demand apostrophes around boldface (whence the name stropping); others require backspacing and underlining; […]
{{cite journal}}
: Cite uses generic title (help)