موضوع مقاله: اومتا | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # اومتا | مقدمه: این زبان با هدف فراهم آوردن «یک روش طبیعی و راحت برای برنامه‌نویسان به منظور پیاده‌سازی توکن‌سازها، تجزیه کننده‌ها، بازدیدگرها و تبدیل‌کننده‌های درختی»، به جای دستور زبان‌های مستقل از متن (CFG) بر اساس دستور زبان‌های تجزیهٔ عبارت (PEG) است. | ## بخش 1: اومتا | هدف اصلی اومتا این است که به مخاطبان گسترده‌تری اجازه دهد تا از تکنیک‌هایی مانند تجزیه که عموماً تنها برای برنامه‌نویسان زبان فراهم است، استفاده کنند. 2013.< اومتا برای کاربردش در ساخت زبان‌های خاص دامنه و به ویژه برای قابلیت نگهداری پیاده‌سازی‌هایش (تازه آمده) شناخته می‌شود. اومتا، مانند سایر فرازبان‌ها، به یک زبان میزبان نیاز دارد که در ابتدا به عنوان پیاده‌سازی COLA ایجاد شد. شرح اومتا یک فرازبان است که در ساخت نمونه‌های اولیه و زبان‌های خاص دامنه استفاده می‌شود و به عنوان یک «زبان شی‌گرا برای تطبیق الگو» معرفی شده‌است. Web.< >.) استفاده می‌کند که برای مدیریت انواع دلخواه داده، مانند کاراکتر، عدد، رشته، اتم و لیست طراحی شده‌اند. مزیت اصلی این زبان بر زبان‌های مشابهش، توانایی آن در استفاده از کد یکسان در تمام مراحل کامپایل است (مثلاً تحلیل لغوی و تجزیه). همچنین اومتا از تعریف قوانین تولید بر اساس آرگومان‌ها نیز پشتیبانی می‌کند؛ این ویژگی می‌تواند برای افزودن چنین قوانینی به خود اومتا یا زبان میزبانی که اومتا روی آن اجرا می‌شود، مورد استفاده قرار گیرد. به علاوه، این قوانین می‌توانند از یکدیگر به عنوان آرگومان استفاده کرده و «قوانین مرتبه بالاتر» بسازند یا از یکدیگر ارث‌بری کنند تا از کد موجود، قوانین تولید به دست آورند. اومتا می‌تواند از نوع داده‌های بولی (درست/نادرست) زبان میزبان در حین تطبیق الگو استفاده کند؛ این‌ها به عنوان «محمولات معنایی» شناخته می‌شوند. اومتا از تطبیق الگوی تعمیم‌یافته استفاده می‌کند تا به برنامه‌نویسان اجازه دهد راحت‌تر مراحل کامپایل را با یک ابزار واحد پیاده‌سازی کنند و گسترش دهند. به دلیل استفاده از تابع __init__ که هنگام ایجاد یک گرامر فراخوانی می‌شود، گرامرها می‌توانند تعداد نامشخصی متغیر نگه دارند. گرامرها دقیقاً مانند کلاس‌ها در زبان‌های برنامه‌نویسی کامل، می‌توانند از یک‌دیگر ارث‌بری کنند یا یک‌دیگر را فراخوانی کنند (استفاده از «مکانیسم فراخوانی تولید خارجی» به گرامرها اجازه می‌دهد تا جریان ورودی یکدیگر را «قرض» بگیرند). همچنین اومتا برخلاف بسیاری از فرازبان‌ها، گزینه‌های یک گرامر داده شده را برای رفع ابهام، اولویت‌بندی می‌کند. | ## بخش 2: اومتا | پس از تطبیق الگوی یک ورودی با یک گرامر داده شده، امتا هر مولفه از الگو را به یک متغیر که بعداً به زبان میزبان می‌دهد، تخصیص می‌دهد. اومتا از تطبیق الگو استفاده می‌کند تا تمام گام‌های کامپایل سنتی را به تنهایی انجام دهد. به این صورت که ابتدا در کاراکترها الگو می‌یابد تا توکن‌ها را بسازد، سپس این توکن‌ها را با گرامرشان تطبیق می‌دهد تا درخت‌های نحو را بسازد. بعد از آن، کنترل‌کننده‌های نوع، الگوهای درخت‌های نحو را تطبیق می‌دهند تا درخت‌های حاشیه‌نویسی بسازند. در اومتا «پیمایش درخت تجزیه آسان است؛ چرا که این عملکرد، به صورت بومی پشتیبانی می‌شود». این فرازبان برای قابل استفاده بودن در بیشتر زبان‌های برنامه‌نویسی مورد توجه قرار گرفته‌است؛ اگرچه معمولاً در زبان پیاده‌سازی‌اش استفاده می‌شود - مثلاً اومتا/جاوااسکریپت (OMeta/JS) در جاوااسکریپت استفاده می‌شود. توسعه الساندرو وارث و ایان پیمارتا در سال ۲۰۰۷ و در مؤسسهٔ تحقیقاتی ViewPoints، سازمانی با هدف بهبود سیستم‌های تحقیقات و رایانش شخصی، اومتا را توسعه دادند. همچنین اومتا در مقالهٔ مقدماتی خود، به عنوان یک مطالعهٔ موردی برای «پیاده‌سازی یک زیرمجموعهٔ تقریباً کامل از جاوااسکریپت» استفاده شد. استفاده اومتا، مانند دیگر فرازبان‌ها، در درجهٔ اول برای ساخت زبان‌های خاص دامنه (DSL) و به‌طور خاص برای نمونهٔ اولیه سازی سریع DLSها استفاده می‌شود. سرعت اجرای کم اومتا و گزارش خطای ناواضح آن، بسیاری از عملکردهایش را به عنوان یک زبان برنامه‌نویسی کامل از بین می‌برد. اومتا به علت تواناییش در استفاده از یک نحو واحد برای تمام مراحل کامپایل مفید است و باعث می‌شود به جای چندین ابزار جداگانه در ساخت کامپایلر استفاده شود.Moser, Jeff. علاوه بر این، اومتا هم به خاطر سرعت استفاده از آن برای ایجاد DSLها و هم میزان کد قابل توجه کم‌تری که برای انجام چنین کاری در مقایسه با پیاده‌سازی وانیلی نیاز دارد، ارزشمند است. گزارش‌هایی نشان می‌دهند که تعداد خط کدهای کارکننده برای اومتا حدود ۲۶٪ پیاده‌سازی وانیلی است. | ## بخش 3: اومتا | وارث گفته‌است که الگوها در «OMeta/X که X یک زبان میزبان است» بهتر است تحت تأثیر X قرار گیرند تا این که با اومتا استاندارد شوند؛ به دلیل این واقعیت که زبان‌های میزبان مختلف انواع مختلفی از اشیا را تشخیص می‌دهند. پیاده‌سازی‌های زبانی با استفاده از OMeta/JS نسبت به مواردی که فقط با استفاده از جاوااسکریپت وانیلی نوشته شده‌اند، برای استفاده راحت‌تر و در حافظه کارآمدتر هستند، اما نشان داده شده‌است که عملکرد بسیار کندتری دارند. به همین علت، OMeta/JS به عنوان ابزار بسیار مفیدی برای نمونهٔ اولیه سازی به‌شمار می‌رود ولی برای پیاده‌سازی تولیدی زبان‌ها، ترجیح داده نمی‌شود. هدف این پروژه، این است که به کاربران امکان درست کردن زبان‌های کاری با سادگی بالا را بدهد. به‌طور خاص، #OMeta قصد دارد به عنوان یک ابزار تنها برای توسعهٔ زبان دات نت کار کند، منحنی یادگیری تیز توسعهٔ زبان را کاهش دهد، به منبعی مفید برای یادگیری تبدیل شود و برای استفاده در برنامه‌های واقعی، کاربردی باشد. #OMeta از کلاس‌ها و نوع‌های دات نت به عنوان گرامرها و از توابع به عنوان «قوانین» داخلی گرامرها استفاده می‌کند. این زبان دقیقاً مانند زبان میزبانش، روی تعیین نوع قوی، تمیز و ایستا تمرکز دارد که به پیچیدگی ساخت زبان، می‌افزاید. پیاده‌سازی‌های جدید سی شارپ نیز باید با فرازبان دات نت سازگار باشند که این خود، ساخت زبان را پیچیده‌تر می‌کند. به علاوه، برای جلوگیری از سو استفادهٔ کاربران از فراقوانین #OMeta، موزر می‌خواهد آن‌ها را به عنوان «یک رابط صریح که از طریق یک ویژگی در معرض دید قرار می‌گیرد» پیاده‌سازی کند. با این حال، به‌روزرسانی‌ها از کمی پس از آغاز پروژه، با recommitهایی از سرور در ۱ اکتبر ۲۰۱۲، وقفهٔ نامشخصی داشته‌اند. این نسخه در عین شباهت به اومتا#، یک پیاده‌سازی بسیار بیشتر پشتیبانی شده و قوی‌تر است که تحت مجوز BSD در گیت‌هاب توزیع شد. | ## جمع‌بندی | اوهم (Ohm) اوهم یک جانشین اومتا، با هدف بهبود آن به وسیلهٔ (در میان دیگر موارد) جداسازی نحو از اعمال معنایی است.