.\" .\" Copyright 2001-2007 Adrian Thurston .\" .\" Permission is hereby granted, free of charge, to any person obtaining a copy .\" of this software and associated documentation files (the "Software"), to .\" deal in the Software without restriction, including without limitation the .\" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or .\" sell copies of the Software, and to permit persons to whom the Software is .\" furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in all .\" copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE .\" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, .\" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" .\" Process this file with .\" groff -man -Tascii ragel.1 .\" .TH RAGEL 1 "@PUBDATE@" "Ragel @VERSION@" "Ragel State Machine Compiler" .SH "نام (NAME)" ragel \- کامپایل زبان‌های باقاعده به ماشین‌های حالت قابل‌اجرا .SH "خلاصه دستور (SYNOPSIS)" .B ragel .RI [ options ] .I file .SH "توضیحات (DESCRIPTION)" برنامهٔ Ragel ماشین‌های حالت متناهی (FSM) قابل‌اجرا را از زبان‌های باقاعده کامپایل می‌کند. Ragel می‌تواند کدهای C، C++، Objective-C، D، Go یا Java تولید کند. ماشین‌های حالت Ragel نه‌تنها می‌توانند مانند ماشین‌های عبارت باقاعده توالی‌های بایت را شناسایی کنند، بلکه می‌توانند در نقاط دلخواهی از فرایند شناسایی زبان باقاعده، کد را اجرا نمایند. کد کاربر با استفاده از عملگرهای درون‌خطی (inline) درج می‌شود که ساختار نحو زبان باقاعده را برهم نمی‌زنند. زبان هسته شامل عملگرهای استاندارد عبارت باقاعده، مانند اجتماع (union)، الحاق (concatenation) و ستاره کلینی (kleene star)، به همراه عملگرهای تعبیه‌کنندهٔ کُنش (action) است. Ragel همچنین عملگرهایی فراهم می‌کند که به شما امکان کنترل هرگونه غیرقطعیتی (non-determinism) که ایجاد می‌کنید، ساخت پوینده‌ها (scanners) با الگوی طولانی‌ترین تطابق (longest match)، و ایجاد ماشین‌های حالت با استفاده از مدل نمودار حالت (statechart) را می‌دهد. همچنین می‌توان از درون یک کنش تعبیه‌شده، با پرش یا فراخوانی بخش‌های دیگر ماشین و پردازش مجدد ورودی، بر اجرای ماشین حالت اثر گذاشت. برنامهٔ Ragel رابط بسیار انعطاف‌پذیری با زبان میزبان فراهم می‌کند که تلاش دارد کمترین محدودیت را در نحوهٔ استفاده و ادغام کد تولیدشده در برنامه ایجاد نماید. کد تولیدشده هیچ وابستگی‌ای ندارد. .SH "گزینه‌ها (OPTIONS)" .TP .BR \-h ", " \-H ", " \-? ", " \-\-help نمایش راهنما و خروج. .TP .B \-v چاپ اطلاعات نسخه و خروج. .TP .B \-o " file" نوشتن خروجی در file. اگر \-o مشخص نشود، یک نام فایل پیش‌فرض با جایگزینی پسوند فایل ورودی انتخاب می‌شود. برای فایل‌های منبعی که به rh. ختم می‌شوند، پسوند h. استفاده می‌شود. برای سایر فایل‌های منبع، پسوندی بر اساس زبان خروجی به کار می‌رود (.c، .cpp، .m و غیره). اگر \-o برای خروجی Graphviz مشخص نشود، فایل dot تولیدشده در خروجی استاندارد نوشته می‌شود. .TP .B \-s چاپ برخی آمارها در خطای استاندارد. .TP .B \--error-format=gnu چاپ پیام‌های خطا با قالب "file:line:column:" (پیش‌فرض). .TP .B \--error-format=msvc چاپ پیام‌های خطا با قالب "file(line,column):" .TP .B \-d عدم حذف کنش‌های تکراری از فهرست کنش‌ها. .TP .B \-I " dir" افزودن dir به فهرست دایرکتوری‌ها جهت جستجوی فایل‌های ضمیمه‌شده (included) و واردشده (imported). .TP .B \-n عدم انجام کمینه‌سازی حالت‌ها. .TP .B \-m انجام کمینه‌سازی تنها یک بار، در پایان کامپایل ماشین حالت. .TP .B \-l کمینه‌سازی تقریباً پس از هر عملیات. فهرست‌هایی از عملیات‌های مشابه مانند اجتماع‌ها، یک بار در پایان کمینه می‌شوند. این گزینهٔ پیش‌فرض کمینه‌سازی است. .TP .B \-e کمینه‌سازی پس از هر عملیات. .TP .B \-x کامپایل ماشین‌های حالت و تولید یک نمایش XML از داده‌های میزبان و ماشین‌ها. .TP .B \-V تولید یک فایل dot برای Graphviz. .TP .B \-p نمایش نویسه‌های قابل چاپ روی برچسب‌ها. .TP .B \-L جلوگیری از نوشتن دستورالعمل‌های #line. .TP .B \-S مشخصات FSM جهت قرارگیری در خروجی. .TP .B \-M تعریف/نمونه‌سازی ماشین جهت قرارگیری در خروجی. .TP .B \-C زبان میزبان C، C++، Obj-C یا Obj-C++ است. این گزینهٔ پیش‌فرض زبان میزبان است. .TP .B --asm --gas-x86-64-sys-v GNU AS، x86_64، System V ABI کد ASM با سبکی معادل با \-G2 تولید می‌شود. .TP .B \-D زبان میزبان D است. .TP .B \-Z زبان میزبان Go است. .TP .B \-J زبان میزبان Java است. .TP .B \-R زبان میزبان Ruby است. .TP .B -A زبان میزبان C# است. .TP .B -O زبان میزبان OCaml است. .TP .B -U زبان میزبان Rust است. .TP .B -Y زبان میزبان Julia است. .TP .B -K زبان میزبان Crack است. .TP .B -P زبان میزبان JavaScript است. .TP .B \-T0 (C/D/Java/Ruby/C#) یک FSM مبتنی بر جدول (table-driven) تولید می‌کند. این سبک کد پیش‌فرض است. مدل FSM مبتنی بر جدول، ماشین حالت را به شکل داده‌های ایستا نمایش می‌دهد. جدول‌هایی از حالت‌ها، گذارها، نمایه‌ها و کنش‌ها وجود دارد. حالت کنونی در یک متغیر ذخیره می‌شود. فرایند اجرا حلقه‌ای است که با داشتن حالت کنونی و نویسهٔ فعلی جهت پردازش، با استفاده از جستجوی دودویی (binary search) گذار مورد نظر را می‌یابد، کنش‌ها را اجرا می‌کند و به حالت مقصد می‌رود. به طور کلی، FSM مبتنی بر جدول باینری کوچک‌تری تولید کرده و به کامپایل سبک‌تری در زبان میزبان نیاز دارد، اما منجر به اجرای کُندتر کد می‌شود. FSM مبتنی بر جدول برای هر FSM مناسب است. .TP .B \-T1 (C/D/Ruby/C#) تولید یک FSM مبتنی بر جدول سریع‌تر با بسط دادن فهرست‌های کنش در کد اجرای کنش. .TP .B \-F0 (C/D/Ruby/C#) تولید یک FSM تختِ مبتنی بر جدول (flat table-driven). گذارها به صورت آرایه‌ای که با نویسهٔ الفبای فعلی نمایه شده نمایش داده می‌شوند. این کار نیاز به جستجوی دودویی برای یافتن گذارها را برطرف کرده و کدی سریع‌تر تولید می‌کند، اما تنها برای الفباهای کوچک مناسب است. .TP .B \-F1 (C/D/Ruby/C#) تولید یک FSM تخت مبتنی بر جدول سریع‌تر با بسط دادن فهرست‌های کنش در کد اجرای کنش. .TP .B \-G0 (C/D/C#) تولید یک FSM مبتنی بر goto. مدل FSM مبتنی بر goto ماشین حالت را به صورت مجموعه‌ای از دستورهای goto نمایش می‌دهد. هنگام اجرای ماشین، حالت کنونی توسط اشاره‌گر دستورالعمل پردازنده نگهداری می‌شود. فرایند اجرا یک تابع مسطح است که در آن کنترل ماشین با استفاده از دستورهای goto از حالتی به حالت دیگر منتقل می‌شود. به طور کلی، FSM مبتنی بر goto کد سریع‌تری تولید می‌کند اما منجر به باینری بزرگ‌تر و کامپایل سنگین‌تر در زبان میزبان می‌شود. .TP .B \-G1 (C/D/C#) تولید یک FSM مبتنی بر goto سریع‌تر با بسط دادن فهرست‌های کنش در کد اجرای کنش. .TP .B \-G2 (C/D/Go) تولید یک FSM بسیار سریع مبتنی بر goto با تعبیه کردن فهرست‌های کنش در کد کنترل ماشین حالت. .TP .B --nfa-conds-depth=D جستجو برای شرط‌های پرهزینه در پیشوندی از ماشین (عمق D از حالت آغازین). مبدا جستجو در سازه‌های اجتماع NFA قرار دارد..TP .B --nfa-term-check جستجو برای تکرارهای عمومی مبتنی بر شرط که به‌درستی عمل نخواهند کرد و باید تکرارهای NFA باشند. جستجو در سازه‌های اجتماع NFA ریشه دارد. .TP .B --nfa-intermed-state-limit=L گزارش شکست در صورتی که تعداد وضعیت‌ها در حین کامپایل از این مقدار فراتر رود. .TP .B --nfa-final-state-limit=L گزارش شکست در صورتی که تعداد وضعیت‌ها در ماشین نهایی از این مقدار تجاوز کند. .TP .B --nfa-breadth-check=E1,E2,.. گزارش هزینهٔ پهنا برای نقاط ورودی نام‌گذاری‌شده (و شروع). گزارش‌دهی از سازه‌های اجتماع NFA آغاز می‌شود. .TP .B --input-histogram=FN هیستوگرام کاراکتر ورودی برای بررسی پهنا. در صورت مشخص نشدن، از یک هیستوگرام مسطح استفاده می‌شود. .SH "ورودی RAGEL (RAGEL INPUT)" نکته: این یک توضیح بسیار اجمالی از ورودی Ragel است. Ragel با جزئیات بیشتر در راهنمای کاربری ارائه‌شده در وب‌سایت اصلی شرح داده شده است (پایین را ببینید). Ragel به‌طور معمول فایل‌های ورودی را مستقیماً به خروجی منتقل می‌کند. زمانی که با یک مشخصهٔ FSM حاوی نمونه‌سازی‌های ماشین مواجه می‌شود، برای تولید ماشین وضعیت متوقف می‌شود. اگر دستورهای write وجود داشته باشند (مانند "write exec")، در این صورت ragel کد متناظر را تولید می‌کند. می‌تواند هر تعداد مشخصهٔ FSM در یک فایل ورودی وجود داشته باشد. یک مشخصهٔ چندخطی FSM با '%%{' شروع شده و با '}%%' خاتمه می‌یابد. یک مشخصهٔ تک‌خطی FSM با %% آغاز می‌شود و با نخستین خط جدید پایان می‌پذیرد. .SH "دستورات FSM (FSM STATEMENTS)" .TP .I Machine Name: تنظیم نام ماشین. در صورت ارائه، باید نخستین دستور باشد. .TP .I Alphabet Type: تنظیم نوع دادهٔ الفبا. .TP .I GetKey: مشخص می‌کند چگونه کاراکتر الفبا از نوع عنصر استخراج شود. .TP .I Include: گنجاندن ماشینی با نامی مشابه نام فعلی یا با نامی متفاوت، از فایل فعلی یا فایلی دیگر. .TP .I Action Definition: تعریف یک کُنش (action) که می‌تواند توسط FSM فراخوانی شود. .TP .I Fsm Definition, Instantiation and Longest Match Instantiation: برای ساخت FSMها استفاده می‌شود. شرح نحو در چند بخش بعدی آمده است. .TP .I Access: نحوهٔ دسترسی به متغیرهای ماندگار ماشین وضعیت را مشخص می‌کند. .TP .I Write: نوشتن بخشی از مؤلفه‌های ماشین. .TP .I Variable: بازنویسی نام‌های پیش‌فرض متغیرها (p، pe، cs، act و غیره). .SH "ماشین‌های پایه (BASIC MACHINES)" ماشین‌های پایه، عملوندهای بنیادین عبارات زبان منظم هستند. .TP .I 'hello' لفظ الحاق (Concat literal). الحاقی از کاراکترها را در رشته تولید می‌کند. از دنباله‌های گریز با '\\' پشتیبانی می‌کند. نتیجه دارای یک وضعیت آغازین و یک گذار به وضعیتی جدید به ازای هر کاراکتر در رشته خواهد بود. آخرین وضعیت در این دنباله، نهایی خواهد شد. برای اینکه رشته نسبت به بزرگی و کوچکی حروف حساس نباشد، یک 'i' به رشته اضافه کنید، مانند 'cmd'i\fR. .TP .I \(dqhello\(dq مشابه نسخهٔ نقل‌قول تکی. .TP .I [hello] لفظ یا (Or literal). اجتماعی از کاراکترها را تولید می‌کند. از بازه‌های کاراکتری با '\-'، معکوس‌سازی مفهوم اجتماع با یک '^' در ابتدا و دنباله‌های گریز با '\\' پشتیبانی می‌کند. نتیجه دارای دو وضعیت با یک گذار بین آن‌ها برای هر کاراکتر یا بازه خواهد بود. .LP نکته: ''، "" و [] ماشین‌های FSM پوچ (null) تولید می‌کنند. ماشین‌های پوچ یک وضعیت دارند که هم وضعیت آغازین و هم وضعیت نهایی است و با رشته‌ای به طول صفر تطبیق پیدا می‌کنند. یک ماشین پوچ می‌تواند با ماشین توکار null ایجاد شود. .TP .I integer یک ماشین دو وضعیتی با یک گذار روی عدد صحیح داده‌شده می‌سازد. .TP .I hex یک ماشین دو وضعیتی با یک گذار روی عدد هگزادسیمال داده‌شده می‌سازد. .TP .I "/simple_regex/" یک عبارت منظم ساده. از نشانه‌گذاری‌های '.'، '*' و '[]'، بازه‌های کاراکتری با '\-'، نفی مفهوم عبارت OR با یک '^' در ابتدا و دنباله‌های گریز با '\\' پشتیبانی می‌کند. همچنین از یک پرچم انتهایی پشتیبانی می‌کند: i. از آن برای ایجاد یک عبارت منظم ناوابسته به بزرگی و کوچکی حروف استفاده کنید، مانند /GET/i. .TP .I lit .. lit یک بازه را مشخص می‌کند. کران‌های بالا و پایین مجاز عبارتند از لفظ‌های الحاق با طول یک و ماشین‌های عددی. به‌عنوان مثال، 0x10..0x20، 0..63 و 'a'..'z' بازه‌های معتبری هستند. .TP .I "variable_name" به تعریف ماشینی که به نام متغیر داده‌شده انتساب یافته ارجاع می‌دهد. .TP .I "builtin_machine" چندین ماشین توکار وجود دارد. همهٔ آن‌ها ماشین‌های دو وضعیتی با هدف تطبیق با دسته‌های رایج کاراکترها هستند. آن‌ها عبارتند از: .RS .TP .B any هر کاراکتری در الفبا. .TP .B ascii کاراکترهای اسکی 0..127. .TP .B extend کاراکترهای توسعه‌یافته اسکی. این بازه -128..127 برای الفباهای علامت‌دار و بازه 0..255 برای الفباهای بدون علامت است. .TP .B alpha کاراکترهای الفبایی /[A-Za-z]/. .TP .B digit ارقام /[0-9]/. .TP .B alnum ارقام و حروف الفبا /[0-9A-Za-z]/. .TP .B lower حروف کوچک /[a-z]/. .TP .B upper حروف بزرگ /[A-Z]/. .TP .B xdigit ارقام هگزادسیمال /[0-9A-Fa-f]/. .TP .B cntrl کاراکترهای کنترلی 0..31، 127. .TP .B graph کاراکترهای گرافیکی /[!-~]/. .TP .B print کاراکترهای قابل چاپ /[ -~]/. .TP .B punct نشانه‌گذاری. کاراکترهای گرافیکی که الفبایی-عددی نیستند /[!-/:-@\\[-`{-~]/. .TP .B space فضای خالی /[\\t\\v\\f\\n\\r ]/. .TP .B null رشته با طول صفر. معادل با ''، "" و []. .TP .B empty مجموعهٔ تهی. با هیچ‌چیز تطبیق پیدا نمی‌کند. .RE.SH "مرجع مختصر عملگرها (BRIEF OPERATOR REFERENCE)" عملگرها بر اساس اولویت گروه‌بندی شده‌اند؛ گروه ۱ کمترین اولویت و گروه ۶ بیشترین اولویت را دارد. .LP .B گروه ۱: .TP .I expr , expr ماشین‌ها را بدون رسم هیچ گذاری، بدون تنظیم حالت آغازین یا هیچ‌یک از حالت‌های پایانی به هم متصل می‌کند. حالت آغازین باید صراحتاً با برچسب "start" مشخص شود. حالت‌های پایانی را می‌توان با گذارهای اپسیلون به حالت "final" که به‌طور ضمنی ایجاد شده است مشخص کرد. .LP .B گروه ۲: .TP .I expr | expr ماشینی تولید می‌کند که با هر رشته‌ای در ماشین یک یا ماشین دو تطابق دارد. .TP .I expr & expr ماشینی تولید می‌کند که با هر رشته‌ای که هم در ماشین یک و هم در ماشین دو وجود دارد تطابق دارد. .TP .I expr - expr ماشینی تولید می‌کند که با هر رشته‌ای که در ماشین یک وجود دارد اما در ماشین دو نیست تطابق دارد. .TP .I expr -- expr تفریق قوی (Strong Subtraction). با هر رشته‌ای در ماشین یک تطابق می‌یابد که هیچ رشته‌ای از ماشین دو به عنوان زیررشته در آن نباشد. .LP .B گروه ۳: .TP .I expr . expr ماشینی تولید می‌کند که با تمام رشته‌های ماشین یک و به دنبال آن تمام رشته‌های ماشین دو تطابق دارد. .TP .I expr :> expr الحاق حفاظت‌شده با ورود (Entry-Guarded Concatenation): با ورود به ماشین دو، ماشین یک را خاتمه می‌دهد. .TP .I expr :>> expr الحاق حفاظت‌شده با اتمام (Finish-Guarded Concatenation): هنگامی که ماشین دو پایان می‌یابد، ماشین یک را خاتمه می‌دهد. .TP .I expr <: expr الحاق حفاظت‌شده از چپ (Left-Guarded Concatenation): اولویت بالاتری به ماشین یک می‌دهد. .LP نکته: الحاق عملگر پیش‌فرض است. قرار گرفتن دو ماشین در کنار یکدیگر بدون هیچ عملگری بین آن‌ها، منجر به عملیات الحاق می‌شود. .LP .B گروه ۴: .TP .I label: expr یک برچسب را به یک عبارت متصل می‌کند. برچسب‌ها را می‌توان برای گذارهای اپسیلون و دستورهای fgoto و fcall در کنش‌ها به کار برد. همچنین توجه داشته باشید که ارجاع به تعریف یک ماشین، باعث ایجاد ضمنی برچسبی با همان نام می‌شود. .LP .B گروه ۵: .TP .I expr -> label یک گذار اپسیلون به حالتی که توسط label تعریف شده رسم می‌کند. label باید نامی در حوزه فعلی باشد. گذارهای اپسیلون هنگام ارزیابی عملگرهای کاما و در ریشه درخت عبارتِ انتساب/نمونه‌سازی ماشین حل‌وفصل می‌شوند. .LP .B گروه ۶: کنش‌ها (Actions) .LP یک کنش ممکن است نامی باشد که از پیش با یک دستور action تعریف شده است، یا مستقیماً با '{' و '}' در عبارت مشخص شود. .TP .I expr > action کنش را در گذارهای آغازین تعبیه می‌کند. .TP .I expr @ action کنش را در گذارهایی که به یک حالت پایانی می‌روند تعبیه می‌کند. .TP .I expr $ action کنش را در تمام گذارها تعبیه می‌کند. شامل گذارهای خروجی معلق (pending out transitions) نمی‌شود. .TP .I expr % action کنش را در گذارهای خروجی معلق از حالت‌های پایانی تعبیه می‌کند. .LP .B گروه ۶: کنش‌های EOF .LP هنگامی که روال finish یک ماشین فراخوانی می‌شود، کنش‌های EOF حالت فعلی اجرا می‌شوند. .TP .I expr >/ action یک کنش EOF را در حالت آغازین تعبیه می‌کند. .TP .I expr / action یک کنش EOF را در تمام حالت‌هایی که حالت آغازین نبوده و پایانی نیستند (حالت‌های میانی) تعبیه می‌کند. .LP .B گروه ۶: کنش‌های خطای سراسری (Global Error Actions) .LP کنش‌های خطای سراسری تا زمان ساخت کامل ماشین حالت نهایی در حالت‌ها ذخیره می‌شوند. سپس آن‌ها به گذارهای خطا منتقل شده و اثری مشابه یک کنش پیش‌فرض را ایجاد می‌کنند. .TP .I expr >! action یک کنش خطای سراسری را در حالت آغازین تعبیه می‌کند. .TP .I expr ! action یک کنش خطای سراسری را در تمام حالت‌هایی که حالت آغازین نبوده و پایانی نیستند (حالت‌های میانی) تعبیه می‌کند. .LP .B گروه ۶: کنش‌های خطای محلی (Local Error Actions) .LP کنش‌های خطای محلی تا زمان ساخت کامل ماشین نام‌برده‌شده در حالت‌ها ذخیره می‌شوند. سپس آن‌ها به گذارهای خطا منتقل شده و اثری مانند یک کنش پیش‌فرض را برای بخشی از کل ماشین ایجاد می‌کنند. توجه داشته باشید که نام ممکن است حذف شود؛ در این صورت، کنش پس از ساخت ماشین فعلی به کنش‌های خطا منتقل خواهد شد. .TP .I expr >^ action یک کنش خطای محلی را در حالت آغازین تعبیه می‌کند. .TP .I expr <^ action یک کنش خطای محلی را در تمام حالت‌ها به جز حالت آغازین تعبیه می‌کند. .TP .I expr $^ action یک کنش خطای محلی را در تمام حالت‌ها تعبیه می‌کند. .TP .I expr %^ action یک کنش خطای محلی را در حالت‌های پایانی تعبیه می‌کند. .TP .I expr @^ action یک کنش خطای محلی را در تمام حالت‌هایی که پایانی نیستند تعبیه می‌کند. .TP .I expr <>^ action یک کنش خطای محلی را در تمام حالت‌هایی که حالت آغازین نبوده و پایانی نیستند (حالت‌های میانی) تعبیه می‌کند. .LP .B گروه ۶: کنش‌های ورود به حالت (To-State Actions) .LP کنش‌های ورود به حالت در حالت‌ها ذخیره می‌شوند و هر بار که ماشین به یک حالت وارد می‌شود به اجرا درمی‌آیند. این شامل گذارهای عادی و انتقال‌های کنترلی مانند fgoto است. توجه داشته باشید که تنظیم حالت فعلی از بیرون ماشین (برای نمونه در طول مقداردهی اولیه) به عنوان گذار به یک حالت محسوب نمی‌شود. .TP .I expr >~ action یک کنش ورود به حالت را در حالت آغازین تعبیه می‌کند. .TP .I expr <~ action یک کنش ورود به حالت را در تمام حالت‌ها به جز حالت آغازین تعبیه می‌کند. .TP .I expr $~ action یک کنش ورود به حالت را در تمام حالت‌ها تعبیه می‌کند. .TP .I expr %~ action یک کنش ورود به حالت را در حالت‌های پایانی تعبیه می‌کند. .TP .I expr @~ action یک کنش ورود به حالت را در تمام حالت‌هایی که پایانی نیستند تعبیه می‌کند. .TP .I expr <>~ action یک کنش ورود به حالت را در تمام حالت‌هایی که حالت آغازین نبوده و پایانی نیستند (حالت‌های میانی) تعبیه می‌کند. .LP .B گروه ۶: کنش‌های خروج از حالت (From-State Actions) .LP کنش‌های خروج از حالت هر زمان که یک حالت بر روی یک نویسه گذاری انجام دهد اجرا می‌شوند. این شامل گذار خطا و گذار به خود نیز می‌شود. .TP .I expr >* action یک کنش خروج از حالت را در حالت آغازین تعبیه می‌کند. .TP .I expr <* action یک کنش خروج از حالت را در تمام حالت‌ها به جز حالت آغازین تعبیه می‌کند. .TP .I expr $* action یک کنش خروج از حالت را در تمام حالت‌ها تعبیه می‌کند. .TP .I expr %* action یک کنش خروج از حالت را در حالت‌های پایانی تعبیه می‌کند. .TP .I expr @* action یک کنش خروج از حالت را در تمام حالت‌هایی که پایانی نیستند تعبیه می‌کند..TP .I expr <>* action قراردادن یک کنش from-state در تمام وضعیت‌هایی که وضعیت آغازین نبوده و پایانی نیز نیستند (وضعیت‌های میانی). .LP .B گروه ۶: تخصیص اولویت (GROUP 6: Priority Assignment) .LP اولویت‌ها به نام‌های درون گذارها تخصیص داده می‌شوند. تنها اولویت‌های با نام یکسان اجازهٔ تعامل با یکدیگر را دارند. در نخستین حالت تخصیص اولویت، نام به‌طور پیش‌فرض برابر با نام تعریف ماشینی است که اولویت در آن تعیین شده است. گذارها اولویت پیش‌فرضی ندارند. .TP .I expr > int اولویت int را به تمام گذارهایی که از وضعیت آغازین خارج می‌شوند تخصیص می‌دهد. .TP .I expr @ int اولویت int را به تمام گذارهایی که به یک وضعیت پایانی وارد می‌شوند تخصیص می‌دهد. .TP .I expr $ int اولویت int را به تمام گذارهای موجود تخصیص می‌دهد. .TP .I expr % int اولویت int را به تمام گذارهای خروجیِ معلق تخصیص می‌دهد. .LP حالت دوم تخصیص اولویت به برنامه‌نویس امکان می‌دهد نامی را که اولویت به آن تخصیص می‌یابد مشخص کند؛ در نتیجه تعاملات می‌توانند از مرزهای تعاریف ماشین فراتر بروند. .TP .I expr > (name,int) اولویت int را با نام name به تمام گذارهایی که از وضعیت آغازین خارج می‌شوند تخصیص می‌دهد. .TP .I expr @ (name, int) اولویت int را با نام name به تمام گذارهایی که به یک وضعیت پایانی وارد می‌شوند تخصیص می‌دهد. .TP .I expr $ (name, int) اولویت int را با نام name به تمام گذارهای موجود تخصیص می‌دهد. .TP .I expr % (name, int) اولویت int را با نام name به تمام گذارهای خروجیِ معلق تخصیص می‌دهد. .LP .B گروه ۷ (GROUP 7): .TP .I expr * ستاره کلینی (Kleene star) یک ماشین را تولید می‌کند. با صفر یا چند بار تکرار ماشین مطابقت پیدا می‌کند. .TP .I expr ** ستاره کلینی با طولانی‌ترین تطابق (Longest-Match Kleene Star). این نسخه از ستاره کلینی، نسبت به بازگشت به ابتدا و شروع دوباره، اولویت بالاتری به ماندن در ماشین می‌دهد. این عملگر معادل ( ( expr ) $0 %1 )* است. .TP .I expr ? ماشینی تولید می‌کند که ماشین داده‌شده یا رشتهٔ تهی (null) را می‌پذیرد. این عملگر معادل ( expr | \(aq\(aq ) است. .TP .I expr + ماشین را در الحاق با ستاره کلینی خودش تولید می‌کند. با یک یا چند بار تکرار ماشین مطابقت پیدا می‌کند. این عملگر معادل ( expr . expr* ) است. .TP .I expr {n} ماشینی تولید می‌کند که دقیقاً با n بار تکرار expr مطابقت دارد. .TP .I expr {,n} ماشینی تولید می‌کند که با صفر تا n بار تکرار expr مطابقت دارد. .TP .I expr {n,} ماشینی تولید می‌کند که با n بار تکرار یا بیشترِ expr مطابقت دارد. .TP .I expr {n,m} ماشینی تولید می‌کند که با n تا m بار تکرار expr مطابقت دارد. .LP .B گروه ۸ (GROUP 8): .TP .I ! expr ماشینی تولید می‌کند که با هر رشته‌ای که توسط ماشین ارائه‌شده تطبیق داده نشود، مطابقت می‌یابد. این عملگر معادل ( *extend \- expr ) است. .TP .I ^ expr نقیض در سطح نویسه (Character-Level Negation). با هر تک‌نویسه‌ای که توسط ماشین تک‌نویسه‌ای expr تطبیق داده نشود، مطابقت می‌یابد. .LP .B گروه ۹ (GROUP 9): .TP .I ( expr ) تقدم و اولویت عملگرها را اجبار می‌کند. .SH "مقادیر موجود در بلوک‌های کد (VALUES AVAILABLE IN CODE BLOCKS)" .TP .I fc نویسهٔ فعلی. معادل *p. .TP .I fpc اشاره‌گری به نویسهٔ فعلی. معادل p. .TP .I fcurs یک مقدار عدد صحیح که نمایانگر وضعیت فعلی است. .TP .I ftargs یک مقدار عدد صحیح که نمایانگر وضعیت هدف است. .TP .I fentry(