استفاده از نشانه های غیر سمبولیک چیست؟

ساخت وبلاگ

Common Lisp the Language ، نسخه دوم بعدی: کاراکترهای کلان UP: نمایش چاپی قبلی: What The Read

هنگامی که یک نشانه گسترده خوانده می شود ، به عنوان یک عدد یا نماد تعبیر می شود. به طور کلی ، اگر این نحو را برای اعداد مشخص شده در جدول 22-2 برآورده کند ، این نشانه به عنوان یک عدد تعبیر می شود. در ادامه این موضوع با جزئیات بیشتری مورد بحث قرار گرفته است.

شخصیت های نشانه های گسترده ممکن است عملکردهای مختلف نحوی را همانطور که در جدول 22-3 نشان داده شده است ، خدمت کنند ، اما باید به خاطر داشت که هر شخصیتی که در یک نشانه تحت کنترل یک شخصیت فرار قرار دارد ، به عنوان الفبایی رفتار می شود تا مطابق با ویژگی های نشان داده شده درمیز. یکی از پیامد این قانون این است که یک شخصیت سفید ، کلان یا شخصیت فرار همیشه به عنوان الفبایی در یک نشانه گسترده رفتار می شود زیرا چنین شخصیتی نمی تواند در یک نشانه گسترده قرار بگیرد ، مگر تحت کنترل شخصیت فرار.

برای اجازه دادن به پسوند به نحو اعداد ، نحو برای اعداد بالقوه در LISP مشترک تعریف می شود که عمومی تر از نحو واقعی برای اعداد است. هر نشانه ای که یک عدد بالقوه نباشد و کاملاً از نقاط تشکیل نشده باشد ، همیشه و در آینده به عنوان یک نماد در نظر گرفته می شود. برنامه ها ممکن است به این واقعیت اعتماد کنند. هر نشانه ای که یک عدد بالقوه باشد اما متناسب با نحو واقعی که در زیر تعریف شده است ، یک نشانه محفوظ است و دارای تفسیر وابسته به پیاده سازی است. یک اجرای ممکن است یک خطا را نشان دهد ، بی سر و صدا با نشانه به عنوان یک نماد رفتار کند یا اقدامات دیگری انجام دهد. برنامه نویسان باید از استفاده از چنین نشانه های رزرو شده خودداری کنند.(نمادی که نام آن مانند یک نشانه رزرو شده است همیشه می تواند با استفاده از یک یا چند شخصیت فرار نوشته شود.)

درست همانطور که Bignum اصطلاح استانداردی است که توسط مجریان LISP برای اعداد صحیح بسیار بزرگ استفاده می شود ، و Flonum (قافیه هایی با "Hum Hum") به یک شماره نقطه شناور اشاره دارد ، اصطلاح potnum به طور گسترده ای به عنوان مخفف "پتانسیل استفاده می شود. شماره.

 

  • این کاملاً از رقم ها ، علائم تشکیل شده است (+یا-) ، نشانگرهای نسبت (/) ، نقاط اعشاری (.) ، شخصیت های پسوند (^یا_) ، و نشانگرهای شماره...)

     

نشانه های زیر در صورت مقدار تعداد بالقوه هستند*خواندن پایه*است16(یک وضعیت غیر طبیعی) ، اما اگر ارزش آن همیشه به عنوان نماد رفتار شود*خواندن پایه*است10(مقدار معمول):

این امکان وجود دارد که ابهام در مورد اینکه آیا نامه ای باید به عنوان یک رقم یا به عنوان یک نشانگر شماره رفتار شود ، وجود داشته باشد. در چنین حالتی ، نامه همیشه به عنوان یک رقم و نه به عنوان یک نشانگر شماره رفتار می شود.

توجه داشته باشید که بازنمایی چاپی برای یک عدد بالقوه ممکن است حاوی شخصیت های فرار نباشد. یک شخصیت فرار شخصیت زیر را از تمام خصوصیات نحوی سرقت می کند ، و این را وادار می کند که به شدت حروف الفبا باشد و در نتیجه برای استفاده در تعداد بالقوه نامناسب باشد. به عنوان مثال ، تمام بازنمودهای زیر به عنوان نمادها تعبیر می شوند ، نه اعداد: در هر حالت ، حذف شخصیت (های) فرار اجازه می دهد تا به عنوان یک عدد رفتار شود.

اگر در واقع یک عدد بالقوه به عنوان یک عدد مطابق با نحو BNF در جدول 22-2 تعبیر شود ، یک موضوع شماره از نوع مناسب ساخته و بازگردانده می شود. لازم به ذکر است که در یک اجرای معین ممکن است این باشد که همه نشانه های مطابق با نحو واقعی برای اعداد در واقع نمی توانند به اشیاء شماره تبدیل شوند. به عنوان مثال ، مشخص کردن یک تعداد بیش از حد بزرگ یا خیلی کوچک برای یک شماره نقطه شناور ممکن است تعداد نمایش در اجرای آن را غیرممکن کند. به همین ترتیب ، نسبت با مخرج صفر (مانند-35/000) در هر اجرا قابل نمایش نیست. در هر شرایطی که یک نشانه با نحو یک عدد به یک شیء شماره داخلی تبدیل شود ، خطایی سیگنال می شود.(از طرف دیگر ، برای مشخص کردن رقم های قابل توجه بیش از حد برای یک شماره نقطه شناور نباید خطایی سیگنال شود ؛ باید یک مقدار مناسب کوتاه یا گرد ایجاد شود.)

در نحو اعداد ، همانطور که در جدول 22-2 شرح داده شده است ، وجود دارد ، به این ترتیب که نحو استفاده احتمالی از حروف به عنوان رقم را به خود اختصاص نمی دهد. RADIX مورد استفاده برای خواندن عدد صحیح و نسبت ها به طور معمول اعشاری است. با این حال ، این رادیو در واقع با مقدار متغیر تعیین می شود*خواندن پایه*که مقدار اولیه آنهاست10. *خواندن پایه*ممکن است بین هر مقدار یکپارچه ای بین2وت36؛بگذارید این مقدار n باشد. سپس یک توکن x به عنوان یک عدد صحیح یا نسبت در پایه n تفسیر می شود اگر می توان به درستی در نحو تفسیر کرد# n r x(به بخش 22. 1. 4 مراجعه کنید). بنابراین ، به عنوان مثال ، اگر ارزش*خواندن پایه*است16، سپس نمایندگی چاپ شده

تفسیر می شود که گویی نمایندگی زیر با آن خوانده شده است*خواندن پایه*بریدن10:

از آنجا که چهار مورد از هفت نشانه موجود در این لیست را می توان به عنوان تعداد شش ضلعی تعبیر کرد. این تسهیلات در نظر گرفته شده است که در خواندن پرونده های داده ها مورد استفاده قرار گیرد که بنا به دلایلی شامل اعداد موجود در رادیو اعشاری نیست. همچنین ممکن است برای برنامه های خواندن نوشته شده در گویش های LISP (مانند MACLISP) که شماره پیش فرض Radix اعشاری نیست استفاده شود. ثابت های غیرقانونی در برنامه های مشترک LISP یا پرونده های داده LISP قابل حمل باید با استفاده از آن نوشته شوند#O, #X, #B، یا# n rنحو.

چه زمانی*خواندن پایه*مقداری بیشتر از10، ابهام در نحو واقعی برای اعداد وارد می شود زیرا یک نامه می تواند به عنوان یک رقم یا نشانگر نماینده باشد. یک مثال ساده است1E0وقتی ارزش*خواندن پایه*است16بشرابهام مطابق با این اصل کلی حل می شود که تفسیر به عنوان یک رقم ترجیح داده می شود به عنوان یک نشانگر شماره تفسیر شود. نتیجه در این مورد این است که اگر یک نشانه را می توان به عنوان یک عدد صحیح یا یک شماره نقطه شناور تعبیر کرد ، پس از آن یک عدد صحیح گرفته می شود.

اگر یک توکن فقط از نقاط (بدون شخصیت های فرار) تشکیل شود ، به جز در یک شرایط ، خطایی سیگنال می شود: اگر نشانه یک نقطه واحد باشد و در شرایطی مناسب برای "لیست نقطه" باشد ، پس از آن اینطور است. به عنوان بخشی از چنین نحوی پذیرفته شده است. سیگنالینگ یک خطا نه تنها نقاط نابجا را در نحو لیست نقطه ای قرار می دهد بلکه لیست هایی را که توسط آنها کوتاه شده است*طول چاپ*برش ، زیرا چنین لیست هایی با یک دنباله سه نقطه به پایان می رسد (.). مثال ها:

در همه موارد دیگر ، این نشانه به عنوان یک نماد تعبیر می شود. اگر نشانگرهای بسته (Colons) در نشانه وجود داشته باشد ، آنها نشانه را به قطعاتی که برای کنترل جستجو و ایجاد نماد استفاده می شوند ، تقسیم می کنند.

اگر یک نشانگر بسته بندی وجود داشته باشد ، و در ابتدای نشانه رخ می دهد ، پس از آن نشانه به عنوان یک کلمه کلیدی تعبیر می شود ، یعنی یک نماد درکلمه کلیدیبسته بندیبخشی از نشانه پس از نشانگر بسته نباید نحو یک عدد را داشته باشد.

اگر در ابتدا یا انتهای نشانه یک نشانگر بسته وجود داشته باشد ، این نشانه را به دو قسمت تقسیم می کند. قسمت اول یک بسته را مشخص می کند. قسمت دوم نام نماد خارجی موجود در آن بسته است. هیچ یک از این دو قسمت ممکن است نحو یک عدد را نداشته باشند.

اگر دو نشانگر بسته مجاور در ابتدا یا انتهای نشانه وجود داشته باشد ، آنها نشانه را به دو قسمت تقسیم می کنند. قسمت اول یک بسته را مشخص می کند. بخش دوم نام نمادی در آن بسته (احتمالاً یک نماد داخلی) است. هیچ یک از این دو قسمت ممکن است نحو یک عدد را نداشته باشند.

X3J13 در مارس 1988 (شماره روده بزرگ) رأی داد تا روشن شود که ، در موقعیت های شرح داده شده در سه پاراگراف قبلی ، محدودیت در نحو قطعات باید تقویت شود: هیچ یک از قسمت ها ممکن است نحو حتی یک عدد بالقوه را نداشته باشند. نشانه هایی مانند: 3600, : 1/2وتویراستار: 3. 14159قبلاً منتفی شده بودند. این توضیح بیشتر اعلام می کند که نشانه هایی مانند: 2^ 3, کامپایلر: 1. 7Jوتکریسمس: 12/25/83همچنین خطا هستند و بنابراین نباید در برنامه های قابل حمل استفاده شود. پیاده سازی ها ممکن است در درمان آنها با چنین تعداد بالقوه دارای بسته بندی متفاوت متفاوت باشد.

اگر یک نماد نماد حاوی نشانگر بسته باشد ، کل توکن نام نماد است. این نماد در بسته پیش فرض ، که مقدار متغیر است ، مورد بررسی قرار می گیرد*بسته*.

تمام الگوهای دیگر نشانگرهای بسته ، از جمله مواردی که بیش از دو نشانگر بسته وجود دارد یا اینکه یک نشانگر بسته در انتهای نشانه ظاهر می شود ، در حال حاضر به معنای چیزی در LISP مشترک نیست (به فصل 11 مراجعه کنید). بنابراین در حال حاضر استفاده از چنین الگوهای در یک برنامه مشترک LISP خطایی است. الگوهای معتبر برای نشانه ها ممکن است به شرح زیر خلاصه شود: جایی که nnnnn نحو یک عدد را دارد و xxxxx و ppppp نحو یک عدد را ندارند.

مطابق با تصمیم X3J13 که در بالا ذکر شد (شماره روده بزرگ) ، XXXXX و PPPPP ممکن است نحو حتی یک عدد بالقوه را نداشته باشند.

ارزش*خواندن پایه*تعبیر نشانه ها توسطخواندنبه عنوان عدد صحیح یا نسبت. مقدار آن Radix است که در آن عدد صحیح و نسبت خوانده می شود. مقدار ممکن است از هر عدد صحیح باشد2به36(فراگیر) و به طور معمول است10(رادیو اعشاری). ارزش آن فقط بر خواندن اعداد صحیح و نسبت تأثیر می گذارد. به طور خاص ، اعداد نقطه شناور همیشه در Redix Decimal خوانده می شوند. ارزش*خواندن پایه*برای اعداد منطقی که رادیکس آن صریحاً توسط نشان داده شده است ، روی radix تأثیر نمی گذارد#O, #X, #B، یا# n rنحو یا با یک نقطه اعشاری دنباله دار.

هنگام تنظیم باید مراقب باشید*خواندن پایه*به یک مقدار بزرگتر از10، از آنجا که نشانه هایی که به طور معمول به عنوان نمادها تعبیر می شوند ممکن است در عوض به عنوان اعداد تعبیر شوند. به عنوان مثال ، با*خواندن پایه*بریدن16(hexadecimal radix) ، متغیرهایی با نام هایی مانندa, b, f, بدوتصورتتوسط خواننده به عنوان اعداد (با مقادیر اعشاری 10 ، 11 ، 15 ، 2989 و 64206) تحت درمان قرار می گیرد. امکان تغییر Radix ورودی در LISP مشترک در درجه اول به منظور خواندن پرونده های داده در قالب های ویژه ، به جای هدف تغییر RADIX پیش فرض برای خواندن برنامه ها ارائه می شود. کاربر به شدت مورد استفاده قرار می گیرد#O, #X, #B، یا# n rنحو هنگام ذکر ثابت های غیر دفعال در برنامه ها.

توجه: این متغیر با متغیر نامیده شده مطابقت دارداربابدر macLisp و به عملکردی گفته می شودمبدادر interlisp.

وقتی ارزش*سرکوب کردن*استنیل، خواننده LISP به طور عادی عمل می کند. وقتی نیستنیل، سپس بیشتر عملیات جالب خواننده سرکوب می شود. شخصیت های ورودی تجزیه می شوند ، اما بخش اعظم آنچه خوانده می شود تفسیر نمی شود.

هدف اصلی از*سرکوب کردن*حمایت از عملکرد سازه های شرطی زمان خوانده شده است#+وت#-(به بخش 22. 1. 4 مراجعه کنید). این مهم است که این سازه ها بتوانند با وجود این احتمال که نحو بیان پر شده ممکن است برای اجرای فعلی کاملاً قانونی نباشد ، از بازنمایی چاپی یک بیان LISP استفاده کنند. این به این دلیل است که یک کاربرد اصلی از#+وت#-این است که با وجود ناسازگاری های کوچک نحو ، همین برنامه در بین چندین پیاده سازی LISP به اشتراک گذاشته شود.

 

  • تمام نشانه های گسترده کاملاً تفسیر نشده اند. مهم نیست که آیا این نشانه مانند یک عدد است ، بسیار کمتر شبیه به یک شماره معتبر. الگوی نشانگرهای بسته نیز مهم نیست. یک نشانه گسترده به سادگی دور ریخته می شود و مانند آن رفتار می شودنیل؛یعنی خواندن یک نشانه طولانی وقتی*سرکوب کردن*غیرنیلبه سادگی برمی گرددنیلبشر(یک نتیجه از این امر این است که خطای مربوط به نحو لیست نامناسب لیست نشان داده نمی شود.)

     

  • هر کدام از#.وت#,سازه ها فرم زیر را می خواند (البته در حالت سرکوب شده) اما آن را ارزیابی نمی کند. فرم دور ریخته می شود ونیلتولید می شود
  • X3J13 در ژانویه 1989 (شارپ-کامما-کنفوژن) رای داد تا حذف شود#,از زبان

 

  • هر کدام از#A, #Sوت#:سازه ها فرم زیر را می خواند (البته در حالت سرکوب شده) اما به هیچ وجه آن را تفسیر نمی کند. حتی در مورد این لیست نیز لازم نیست#S، یا نمادی در مورد#:بشرفرم دور ریخته می شود ونیلتولید می شود

     

در بعضی موارد ، ممکن است برای یک تعریف ماکرو شخصیت نوشته شده توسط کاربر مناسب باشد تا مقدار آن را بررسی کند*سرکوب کردن*و برای جلوگیری از محاسبات خاص یا عوارض جانبی اگر مقدار آن نباشدنیل.

X3J13 در ژوئن 1989 (Data-IO) رای داد تا یک متغیر کنترل جدید خواننده را اضافه کند ،*خواندن-وحشت*که مقدار پیش فرض آن استtبشراگر*خواندن-وحشت*دروغ است ،#.ماکرو خواننده خطایی را نشان می دهد.

چاپ نیز تحت تأثیر قرار می گیرد. اگر*خواندن-وحشت*دروغ است و*چاپی با قیام*درست است ، هرچاپارروشی که در غیر این صورت خروجی a#.ماکرو خواننده یا باید چیزی متفاوت را خروجی کند یا خطایی از نوع را نشان دهدقابل خواندن.

الزام آور*خواندن-وحشت*بهنیلهنگام خواندن داده هایی که از یک منبع غیر قابل اعتماد ، مانند شبکه یا پرونده داده تهیه شده توسط کاربر تهیه شده اند ، مفید است. این مانع از#.خواننده کلان از سوءاستفاده به عنوان "اسب تروجان" برای ارزیابی اشکال خودسرانه استفاده می شود.

فارکس در ایران...
ما را در سایت فارکس در ایران دنبال می کنید

برچسب : نویسنده : محمدرضا گلزار بازدید : 59 تاريخ : پنجشنبه 3 فروردين 1402 ساعت: 22:40