۲۳ - ۱ترکیب‌کننده‌های پارسر

لغتِ پارس از معادلِ لاتین برای part* میاد، و به معنای بررسی و تقسیم‌بندی نقش‌های گرامری در یک جمله‌ست. قبلاً معلم‌های دستور زبان روی این قابلیت تأکید داشتن چون دانشجوها رو مجبور می‌کرد به ساختار جملات، روابط بین بخش‌های مختلف، و ارتباط بین ساختار و معنای کلی فکر کنن. کشیدن نمودارِ جملات هم رایج بود چون پارس کردن رو بصری و تا حدی شفاف‌تر می‌کرد.

*

قطعه، بخش، قسمت

حالا هم ارائه‌ی ساختارهای گرامریِ زبان‌های طبیعی به صورت درختی رواج داره، مثلاً برای یه جمله مثل:

Boy plays with cat.
.پسر با گربه بازی می‌کند

میشه چنین ساختاری رو در نظر گرفت:

          (Sentence جمله)
         /                \
    Boy پسر           plays بازی می‌کند
(subject نهاد)          (verb فعل)
                              \
                            with با
                       (preposition حرف اضافه)
                                 \
                              cat گربه
                            (object مفعول)

نمی‌خوایم زبان‌شناس بشیم، اما پارس‌کردن در علم کامپیوتر و پارس‌کردن ِ جملات در زبان طبیعی به هم ربط دارن. ایده‌ی اصلیِ پارس‌کردن در برنامه‌نویسی اینه که بعد از گرفتن یه ورودی سریالی – در فرمِ تسلسل‌ای از حروف (داده‌ی نوشتاری) یا بایت‌ها (داده‌ی باینری ِ خام) – اون رو به یک مقدار از یه نوع‌داده تبدیل کنه. داده‌ی سریالی داده‌ایه که به فرمتی (مثل JSON یا XML)* مناسب برای ذخیره‌سازی، یا برای انتقال از طریق یه شبکه‌ی ارتباطی، ترجمه شده باشه. با پارس‌کردن میشه اون داده رو بخش‌بخش و قسمت‌هایی که می‌خواین رو پیدا و پردازش کنین.

*

اگه هنوز نمی‌دونین JSON و XML چی‌اند، نگران نشین. چیزی که اینجا مهمه اینه که اونها فرمت‌های استاندارد برای داده‌هااند. جلوتر در این فصل، JSON رو با جزئیات بیشتر نگاه می‌کنیم.

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

در این فصل:

  • مبانیِ پارسینگ رو به کمک یه کتابخونه توضیح میدیم؛

  • قدرت خیلی جذابِ ترکیب‌کننده‌های پارسر رو نشون میدیم؛

  • مقداری داده‌ی JSON رو مارشال و آنمارشال* می‌کنیم؛

  • کمی از علامت‌گذاری صحبت می‌کنیم.

    *

    م. مارشال و آنمارشال کردن مشابه سریال و دِسریال کردن می‌مونن.