| RAGEL(1) | Ragel State Machine Compiler | RAGEL(1) |
نام (NAME)
ragel - کامپایل زبانهای باقاعده به ماشینهای حالت قابلاجرا
خلاصه دستور (SYNOPSIS)
ragel [options] file
توضیحات (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 رابط بسیار انعطافپذیری با زبان میزبان فراهم میکند که تلاش دارد کمترین محدودیت را در نحوهٔ استفاده و ادغام کد تولیدشده در برنامه ایجاد نماید. کد تولیدشده هیچ وابستگیای ندارد.
گزینهها (OPTIONS)
- -h, -H, -?, --help
- نمایش راهنما و خروج.
- -v
- چاپ اطلاعات نسخه و خروج.
- -o file
- نوشتن خروجی در file. اگر -o مشخص نشود، یک نام فایل پیشفرض با جایگزینی پسوند فایل ورودی انتخاب میشود. برای فایلهای منبعی که به rh. ختم میشوند، پسوند h. استفاده میشود. برای سایر فایلهای منبع، پسوندی بر اساس زبان خروجی به کار میرود (.c، .cpp، .m و غیره). اگر -o برای خروجی Graphviz مشخص نشود، فایل dot تولیدشده در خروجی استاندارد نوشته میشود.
- -s
- چاپ برخی آمارها در خطای استاندارد.
- --error-format=gnu
- چاپ پیامهای خطا با قالب "file:line:column:" (پیشفرض).
- --error-format=msvc
- چاپ پیامهای خطا با قالب "file(line,column):"
- -d
- عدم حذف کنشهای تکراری از فهرست کنشها.
- -I dir
- افزودن dir به فهرست دایرکتوریها جهت جستجوی فایلهای ضمیمهشده (included) و واردشده (imported).
- -n
- عدم انجام کمینهسازی حالتها.
- -m
- انجام کمینهسازی تنها یک بار، در پایان کامپایل ماشین حالت.
- -l
- کمینهسازی تقریباً پس از هر عملیات. فهرستهایی از عملیاتهای مشابه مانند اجتماعها، یک بار در پایان کمینه میشوند. این گزینهٔ پیشفرض کمینهسازی است.
- -e
- کمینهسازی پس از هر عملیات.
- -x
- کامپایل ماشینهای حالت و تولید یک نمایش XML از دادههای میزبان و ماشینها.
- -V
- تولید یک فایل dot برای Graphviz.
- -p
- نمایش نویسههای قابل چاپ روی برچسبها.
- -L
- جلوگیری از نوشتن دستورالعملهای #line.
- -S <spec>
- مشخصات FSM جهت قرارگیری در خروجی.
- -M <machine>
- تعریف/نمونهسازی ماشین جهت قرارگیری در خروجی.
- -C
- زبان میزبان C، C++، Obj-C یا Obj-C++ است. این گزینهٔ پیشفرض زبان میزبان است.
- --asm --gas-x86-64-sys-v
- GNU AS، x86_64، System V ABI کد ASM با سبکی معادل با -G2 تولید میشود.
- -D
- زبان میزبان D است.
- -Z
- زبان میزبان Go است.
- -J
- زبان میزبان Java است.
- -R
- زبان میزبان Ruby است.
- -A
- زبان میزبان C# است.
- -O
- زبان میزبان OCaml است.
- -U
- زبان میزبان Rust است.
- -Y
- زبان میزبان Julia است.
- -K
- زبان میزبان Crack است.
- -P
- زبان میزبان JavaScript است.
- -T0
- (C/D/Java/Ruby/C#) یک FSM مبتنی بر جدول (table-driven) تولید میکند. این سبک کد پیشفرض است. مدل FSM مبتنی بر جدول، ماشین حالت را به شکل دادههای ایستا نمایش میدهد. جدولهایی از حالتها، گذارها، نمایهها و کنشها وجود دارد. حالت کنونی در یک متغیر ذخیره میشود. فرایند اجرا حلقهای است که با داشتن حالت کنونی و نویسهٔ فعلی جهت پردازش، با استفاده از جستجوی دودویی (binary search) گذار مورد نظر را مییابد، کنشها را اجرا میکند و به حالت مقصد میرود. به طور کلی، FSM مبتنی بر جدول باینری کوچکتری تولید کرده و به کامپایل سبکتری در زبان میزبان نیاز دارد، اما منجر به اجرای کُندتر کد میشود. FSM مبتنی بر جدول برای هر FSM مناسب است.
- -T1
- (C/D/Ruby/C#) تولید یک FSM مبتنی بر جدول سریعتر با بسط دادن فهرستهای کنش در کد اجرای کنش.
- -F0
- (C/D/Ruby/C#) تولید یک FSM تختِ مبتنی بر جدول (flat table-driven). گذارها به صورت آرایهای که با نویسهٔ الفبای فعلی نمایه شده نمایش داده میشوند. این کار نیاز به جستجوی دودویی برای یافتن گذارها را برطرف کرده و کدی سریعتر تولید میکند، اما تنها برای الفباهای کوچک مناسب است.
- -F1
- (C/D/Ruby/C#) تولید یک FSM تخت مبتنی بر جدول سریعتر با بسط دادن فهرستهای کنش در کد اجرای کنش.
- -G0
- (C/D/C#) تولید یک FSM مبتنی بر goto. مدل FSM مبتنی بر goto ماشین حالت را به صورت مجموعهای از دستورهای goto نمایش میدهد. هنگام اجرای ماشین، حالت کنونی توسط اشارهگر دستورالعمل پردازنده نگهداری میشود. فرایند اجرا یک تابع مسطح است که در آن کنترل ماشین با استفاده از دستورهای goto از حالتی به حالت دیگر منتقل میشود. به طور کلی، FSM مبتنی بر goto کد سریعتری تولید میکند اما منجر به باینری بزرگتر و کامپایل سنگینتر در زبان میزبان میشود.
- -G1
- (C/D/C#) تولید یک FSM مبتنی بر goto سریعتر با بسط دادن فهرستهای کنش در کد اجرای کنش.
- -G2
- (C/D/Go) تولید یک FSM بسیار سریع مبتنی بر goto با تعبیه کردن فهرستهای کنش در کد کنترل ماشین حالت.
- --nfa-conds-depth=D
- جستجو برای شرطهای پرهزینه در پیشوندی از ماشین (عمق D از حالت آغازین). مبدا جستجو در سازههای اجتماع NFA قرار دارد..TP --nfa-term-check جستجو برای تکرارهای عمومی مبتنی بر شرط که بهدرستی عمل نخواهند کرد و باید تکرارهای NFA باشند. جستجو در سازههای اجتماع NFA ریشه دارد.
- --nfa-intermed-state-limit=L
- گزارش شکست در صورتی که تعداد وضعیتها در حین کامپایل از این مقدار فراتر رود.
- --nfa-final-state-limit=L
- گزارش شکست در صورتی که تعداد وضعیتها در ماشین نهایی از این مقدار تجاوز کند.
- --nfa-breadth-check=E1,E2,..
- گزارش هزینهٔ پهنا برای نقاط ورودی نامگذاریشده (و شروع). گزارشدهی از سازههای اجتماع NFA آغاز میشود.
- --input-histogram=FN
- هیستوگرام کاراکتر ورودی برای بررسی پهنا. در صورت مشخص نشدن، از یک هیستوگرام مسطح استفاده میشود.
ورودی RAGEL (RAGEL INPUT)
نکته: این یک توضیح بسیار اجمالی از ورودی Ragel است. Ragel با جزئیات بیشتر در راهنمای کاربری ارائهشده در وبسایت اصلی شرح داده شده است (پایین را ببینید).
Ragel بهطور معمول فایلهای ورودی را مستقیماً به خروجی منتقل میکند. زمانی که با یک مشخصهٔ FSM حاوی نمونهسازیهای ماشین مواجه میشود، برای تولید ماشین وضعیت متوقف میشود. اگر دستورهای write وجود داشته باشند (مانند "write exec")، در این صورت ragel کد متناظر را تولید میکند. میتواند هر تعداد مشخصهٔ FSM در یک فایل ورودی وجود داشته باشد. یک مشخصهٔ چندخطی FSM با '%%{' شروع شده و با '}%%' خاتمه مییابد. یک مشخصهٔ تکخطی FSM با %% آغاز میشود و با نخستین خط جدید پایان میپذیرد.
دستورات FSM (FSM STATEMENTS)
- Machine Name:
- تنظیم نام ماشین. در صورت ارائه، باید نخستین دستور باشد.
- Alphabet Type:
- تنظیم نوع دادهٔ الفبا.
- GetKey:
- مشخص میکند چگونه کاراکتر الفبا از نوع عنصر استخراج شود.
- Include:
- گنجاندن ماشینی با نامی مشابه نام فعلی یا با نامی متفاوت، از فایل فعلی یا فایلی دیگر.
- Action Definition:
- تعریف یک کُنش (action) که میتواند توسط FSM فراخوانی شود.
- Fsm Definition, Instantiation and Longest Match Instantiation:
- برای ساخت FSMها استفاده میشود. شرح نحو در چند بخش بعدی آمده است.
- Access:
- نحوهٔ دسترسی به متغیرهای ماندگار ماشین وضعیت را مشخص میکند.
- Write:
- نوشتن بخشی از مؤلفههای ماشین.
- Variable:
- بازنویسی نامهای پیشفرض متغیرها (p، pe، cs، act و غیره).
ماشینهای پایه (BASIC MACHINES)
ماشینهای پایه، عملوندهای بنیادین عبارات زبان منظم هستند.
- 'hello'
- لفظ الحاق (Concat literal). الحاقی از کاراکترها را در رشته تولید میکند. از دنبالههای گریز با '\' پشتیبانی میکند. نتیجه دارای یک وضعیت آغازین و یک گذار به وضعیتی جدید به ازای هر کاراکتر در رشته خواهد بود. آخرین وضعیت در این دنباله، نهایی خواهد شد. برای اینکه رشته نسبت به بزرگی و کوچکی حروف حساس نباشد، یک 'i' به رشته اضافه کنید، مانند 'cmd'i.
- "hello"
- مشابه نسخهٔ نقلقول تکی.
- [hello]
- لفظ یا (Or literal). اجتماعی از کاراکترها را تولید میکند. از بازههای کاراکتری با '-'، معکوسسازی مفهوم اجتماع با یک '^' در ابتدا و دنبالههای گریز با '\' پشتیبانی میکند. نتیجه دارای دو وضعیت با یک گذار بین آنها برای هر کاراکتر یا بازه خواهد بود.
نکته: ''، "" و [] ماشینهای FSM پوچ (null) تولید میکنند. ماشینهای پوچ یک وضعیت دارند که هم وضعیت آغازین و هم وضعیت نهایی است و با رشتهای به طول صفر تطبیق پیدا میکنند. یک ماشین پوچ میتواند با ماشین توکار null ایجاد شود.
- integer
- یک ماشین دو وضعیتی با یک گذار روی عدد صحیح دادهشده میسازد.
- hex
- یک ماشین دو وضعیتی با یک گذار روی عدد هگزادسیمال دادهشده میسازد.
- /simple_regex/
- یک عبارت منظم ساده. از نشانهگذاریهای '.'، '*' و '[]'، بازههای کاراکتری با '-'، نفی مفهوم عبارت OR با یک '^' در ابتدا و دنبالههای گریز با '\' پشتیبانی میکند. همچنین از یک پرچم انتهایی پشتیبانی میکند: i. از آن برای ایجاد یک عبارت منظم ناوابسته به بزرگی و کوچکی حروف استفاده کنید، مانند /GET/i.
- lit .. lit
- یک بازه را مشخص میکند. کرانهای بالا و پایین مجاز عبارتند از لفظهای الحاق با طول یک و ماشینهای عددی. بهعنوان مثال، 0x10..0x20، 0..63 و 'a'..'z' بازههای معتبری هستند.
- variable_name
- به تعریف ماشینی که به نام متغیر دادهشده انتساب یافته ارجاع میدهد.
- builtin_machine
- چندین ماشین توکار وجود دارد. همهٔ آنها ماشینهای دو وضعیتی با هدف تطبیق با دستههای رایج کاراکترها هستند. آنها عبارتند از:
- any
- هر کاراکتری در الفبا.
- ascii
- کاراکترهای اسکی 0..127.
- extend
- کاراکترهای توسعهیافته اسکی. این بازه -128..127 برای الفباهای علامتدار و بازه 0..255 برای الفباهای بدون علامت است.
- alpha
- کاراکترهای الفبایی /[A-Za-z]/.
- digit
- ارقام /[0-9]/.
- alnum
- ارقام و حروف الفبا /[0-9A-Za-z]/.
- lower
- حروف کوچک /[a-z]/.
- upper
- حروف بزرگ /[A-Z]/.
- xdigit
- ارقام هگزادسیمال /[0-9A-Fa-f]/.
- cntrl
- کاراکترهای کنترلی 0..31، 127.
- graph
- کاراکترهای گرافیکی /[!-~]/.
- کاراکترهای قابل چاپ /[ -~]/.
- punct
- نشانهگذاری. کاراکترهای گرافیکی که الفبایی-عددی نیستند /[!-/:-@\[-`{-~]/.
- space
- فضای خالی /[\t\v\f\n\r ]/.
- null
- رشته با طول صفر. معادل با ''، "" و [].
- empty
- مجموعهٔ تهی. با هیچچیز تطبیق پیدا نمیکند. عملگرها بر اساس اولویت گروهبندی شدهاند؛ گروه ۱ کمترین اولویت و گروه ۶ بیشترین اولویت را دارد.
گروه ۱:
- expr , expr
- ماشینها را بدون رسم هیچ گذاری، بدون تنظیم حالت آغازین یا هیچیک از حالتهای پایانی به هم متصل میکند. حالت آغازین باید صراحتاً با برچسب "start" مشخص شود. حالتهای پایانی را میتوان با گذارهای اپسیلون به حالت "final" که بهطور ضمنی ایجاد شده است مشخص کرد.
گروه ۲:
- expr | expr
- ماشینی تولید میکند که با هر رشتهای در ماشین یک یا ماشین دو تطابق دارد.
- expr & expr
- ماشینی تولید میکند که با هر رشتهای که هم در ماشین یک و هم در ماشین دو وجود دارد تطابق دارد.
- expr - expr
- ماشینی تولید میکند که با هر رشتهای که در ماشین یک وجود دارد اما در ماشین دو نیست تطابق دارد.
- expr -- expr
- تفریق قوی (Strong Subtraction). با هر رشتهای در ماشین یک تطابق مییابد که هیچ رشتهای از ماشین دو به عنوان زیررشته در آن نباشد.
گروه ۳:
- expr . expr
- ماشینی تولید میکند که با تمام رشتههای ماشین یک و به دنبال آن تمام رشتههای ماشین دو تطابق دارد.
- expr :> expr
- الحاق حفاظتشده با ورود (Entry-Guarded Concatenation): با ورود به ماشین دو، ماشین یک را خاتمه میدهد.
- expr :>> expr
- الحاق حفاظتشده با اتمام (Finish-Guarded Concatenation): هنگامی که ماشین دو پایان مییابد، ماشین یک را خاتمه میدهد.
- expr <: expr
- الحاق حفاظتشده از چپ (Left-Guarded Concatenation): اولویت بالاتری به ماشین یک میدهد.
نکته: الحاق عملگر پیشفرض است. قرار گرفتن دو ماشین در کنار یکدیگر بدون هیچ عملگری بین آنها، منجر به عملیات الحاق میشود.
گروه ۴:
- label: expr
- یک برچسب را به یک عبارت متصل میکند. برچسبها را میتوان برای گذارهای اپسیلون و دستورهای fgoto و fcall در کنشها به کار برد. همچنین توجه داشته باشید که ارجاع به تعریف یک ماشین، باعث ایجاد ضمنی برچسبی با همان نام میشود.
گروه ۵:
- expr -> label
- یک گذار اپسیلون به حالتی که توسط label تعریف شده رسم میکند. label باید نامی در حوزه فعلی باشد. گذارهای اپسیلون هنگام ارزیابی عملگرهای کاما و در ریشه درخت عبارتِ انتساب/نمونهسازی ماشین حلوفصل میشوند.
گروه ۶: کنشها (Actions)
یک کنش ممکن است نامی باشد که از پیش با یک دستور action تعریف شده است، یا مستقیماً با '{' و '}' در عبارت مشخص شود.
- expr > action
- کنش را در گذارهای آغازین تعبیه میکند.
- expr @ action
- کنش را در گذارهایی که به یک حالت پایانی میروند تعبیه میکند.
- expr $ action
- کنش را در تمام گذارها تعبیه میکند. شامل گذارهای خروجی معلق (pending out transitions) نمیشود.
- expr % action
- کنش را در گذارهای خروجی معلق از حالتهای پایانی تعبیه میکند.
گروه ۶: کنشهای EOF
هنگامی که روال finish یک ماشین فراخوانی میشود، کنشهای EOF حالت فعلی اجرا میشوند.
- expr >/ action
- یک کنش EOF را در حالت آغازین تعبیه میکند.
- expr </ action
- یک کنش EOF را در تمام حالتها به جز حالت آغازین تعبیه میکند.
- expr $/ action
- یک کنش EOF را در تمام حالتها تعبیه میکند.
- expr %/ action
- یک کنش EOF را در حالتهای پایانی تعبیه میکند.
- expr @/ action
- یک کنش EOF را در تمام حالتهایی که پایانی نیستند تعبیه میکند.
- expr <>/ action
- یک کنش EOF را در تمام حالتهایی که حالت آغازین نبوده و پایانی نیستند (حالتهای میانی) تعبیه میکند.
گروه ۶: کنشهای خطای سراسری (Global Error Actions)
کنشهای خطای سراسری تا زمان ساخت کامل ماشین حالت نهایی در حالتها ذخیره میشوند. سپس آنها به گذارهای خطا منتقل شده و اثری مشابه یک کنش پیشفرض را ایجاد میکنند.
- expr >! action
- یک کنش خطای سراسری را در حالت آغازین تعبیه میکند.
- expr <! action
- یک کنش خطای سراسری را در تمام حالتها به جز حالت آغازین تعبیه میکند.
- expr $! action
- یک کنش خطای سراسری را در تمام حالتها تعبیه میکند.
- expr %! action
- یک کنش خطای سراسری را در حالتهای پایانی تعبیه میکند.
- expr @! action
- یک کنش خطای سراسری را در تمام حالتهایی که پایانی نیستند تعبیه میکند.
- expr <>! action
- یک کنش خطای سراسری را در تمام حالتهایی که حالت آغازین نبوده و پایانی نیستند (حالتهای میانی) تعبیه میکند.
گروه ۶: کنشهای خطای محلی (Local Error Actions)
کنشهای خطای محلی تا زمان ساخت کامل ماشین نامبردهشده در حالتها ذخیره میشوند. سپس آنها به گذارهای خطا منتقل شده و اثری مانند یک کنش پیشفرض را برای بخشی از کل ماشین ایجاد میکنند. توجه داشته باشید که نام ممکن است حذف شود؛ در این صورت، کنش پس از ساخت ماشین فعلی به کنشهای خطا منتقل خواهد شد.
- expr >^ action
- یک کنش خطای محلی را در حالت آغازین تعبیه میکند.
- expr <^ action
- یک کنش خطای محلی را در تمام حالتها به جز حالت آغازین تعبیه میکند.
- expr $^ action
- یک کنش خطای محلی را در تمام حالتها تعبیه میکند.
- expr %^ action
- یک کنش خطای محلی را در حالتهای پایانی تعبیه میکند.
- expr @^ action
- یک کنش خطای محلی را در تمام حالتهایی که پایانی نیستند تعبیه میکند.
- expr <>^ action
- یک کنش خطای محلی را در تمام حالتهایی که حالت آغازین نبوده و پایانی نیستند (حالتهای میانی) تعبیه میکند.
گروه ۶: کنشهای ورود به حالت (To-State Actions)
کنشهای ورود به حالت در حالتها ذخیره میشوند و هر بار که ماشین به یک حالت وارد میشود به اجرا درمیآیند. این شامل گذارهای عادی و انتقالهای کنترلی مانند fgoto است. توجه داشته باشید که تنظیم حالت فعلی از بیرون ماشین (برای نمونه در طول مقداردهی اولیه) به عنوان گذار به یک حالت محسوب نمیشود.
- expr >~ action
- یک کنش ورود به حالت را در حالت آغازین تعبیه میکند.
- expr <~ action
- یک کنش ورود به حالت را در تمام حالتها به جز حالت آغازین تعبیه میکند.
- expr $~ action
- یک کنش ورود به حالت را در تمام حالتها تعبیه میکند.
- expr %~ action
- یک کنش ورود به حالت را در حالتهای پایانی تعبیه میکند.
- expr @~ action
- یک کنش ورود به حالت را در تمام حالتهایی که پایانی نیستند تعبیه میکند.
- expr <>~ action
- یک کنش ورود به حالت را در تمام حالتهایی که حالت آغازین نبوده و پایانی نیستند (حالتهای میانی) تعبیه میکند.
گروه ۶: کنشهای خروج از حالت (From-State Actions)
کنشهای خروج از حالت هر زمان که یک حالت بر روی یک نویسه گذاری انجام دهد اجرا میشوند. این شامل گذار خطا و گذار به خود نیز میشود.
- expr >* action
- یک کنش خروج از حالت را در حالت آغازین تعبیه میکند.
- expr <* action
- یک کنش خروج از حالت را در تمام حالتها به جز حالت آغازین تعبیه میکند.
- expr $* action
- یک کنش خروج از حالت را در تمام حالتها تعبیه میکند.
- expr %* action
- یک کنش خروج از حالت را در حالتهای پایانی تعبیه میکند.
- expr @* action
- یک کنش خروج از حالت را در تمام حالتهایی که پایانی نیستند تعبیه میکند..TP expr <>* action قراردادن یک کنش from-state در تمام وضعیتهایی که وضعیت آغازین نبوده و پایانی نیز نیستند (وضعیتهای میانی).
گروه ۶: تخصیص اولویت (GROUP 6: Priority Assignment)
اولویتها به نامهای درون گذارها تخصیص داده میشوند. تنها اولویتهای با نام یکسان اجازهٔ تعامل با یکدیگر را دارند. در نخستین حالت تخصیص اولویت، نام بهطور پیشفرض برابر با نام تعریف ماشینی است که اولویت در آن تعیین شده است. گذارها اولویت پیشفرضی ندارند.
- expr > int
- اولویت int را به تمام گذارهایی که از وضعیت آغازین خارج میشوند تخصیص میدهد.
- expr @ int
- اولویت int را به تمام گذارهایی که به یک وضعیت پایانی وارد میشوند تخصیص میدهد.
- expr $ int
- اولویت int را به تمام گذارهای موجود تخصیص میدهد.
- expr % int
- اولویت int را به تمام گذارهای خروجیِ معلق تخصیص میدهد.
حالت دوم تخصیص اولویت به برنامهنویس امکان میدهد نامی را که اولویت به آن تخصیص مییابد مشخص کند؛ در نتیجه تعاملات میتوانند از مرزهای تعاریف ماشین فراتر بروند.
- expr > (name,int)
- اولویت int را با نام name به تمام گذارهایی که از وضعیت آغازین خارج میشوند تخصیص میدهد.
- expr @ (name, int)
- اولویت int را با نام name به تمام گذارهایی که به یک وضعیت پایانی وارد میشوند تخصیص میدهد.
- expr $ (name, int)
- اولویت int را با نام name به تمام گذارهای موجود تخصیص میدهد.
- expr % (name, int)
- اولویت int را با نام name به تمام گذارهای خروجیِ معلق تخصیص میدهد.
گروه ۷ (GROUP 7):
- expr *
- ستاره کلینی (Kleene star) یک ماشین را تولید میکند. با صفر یا چند بار تکرار ماشین مطابقت پیدا میکند.
- expr **
- ستاره کلینی با طولانیترین تطابق (Longest-Match Kleene Star). این نسخه از ستاره کلینی، نسبت به بازگشت به ابتدا و شروع دوباره، اولویت بالاتری به ماندن در ماشین میدهد. این عملگر معادل ( ( expr ) $0 %1 )* است.
- expr ?
- ماشینی تولید میکند که ماشین دادهشده یا رشتهٔ تهی (null) را میپذیرد. این عملگر معادل ( expr | '' ) است.
- expr +
- ماشین را در الحاق با ستاره کلینی خودش تولید میکند. با یک یا چند بار تکرار ماشین مطابقت پیدا میکند. این عملگر معادل ( expr . expr* ) است.
- expr {n}
- ماشینی تولید میکند که دقیقاً با n بار تکرار expr مطابقت دارد.
- expr {,n}
- ماشینی تولید میکند که با صفر تا n بار تکرار expr مطابقت دارد.
- expr {n,}
- ماشینی تولید میکند که با n بار تکرار یا بیشترِ expr مطابقت دارد.
- expr {n,m}
- ماشینی تولید میکند که با n تا m بار تکرار expr مطابقت دارد.
گروه ۸ (GROUP 8):
- ! expr
- ماشینی تولید میکند که با هر رشتهای که توسط ماشین ارائهشده تطبیق داده نشود، مطابقت مییابد. این عملگر معادل ( *extend - expr ) است.
- ^ expr
- نقیض در سطح نویسه (Character-Level Negation). با هر تکنویسهای که توسط ماشین تکنویسهای expr تطبیق داده نشود، مطابقت مییابد.
گروه ۹ (GROUP 9):
- ( expr )
- تقدم و اولویت عملگرها را اجبار میکند.
مقادیر موجود در بلوکهای کد (VALUES AVAILABLE IN CODE BLOCKS)
- fc
- نویسهٔ فعلی. معادل *p.
- fpc
- اشارهگری به نویسهٔ فعلی. معادل p.
- fcurs
- یک مقدار عدد صحیح که نمایانگر وضعیت فعلی است.
- ftargs
- یک مقدار عدد صحیح که نمایانگر وضعیت هدف است.
- fentry(<label>)
- یک مقدار عدد صحیح که نمایانگر نقطهٔ ورود <label> است.
دستورات موجود در بلوکهای کد (STATEMENTS AVAILABLE IN CODE BLOCKS)
- fhold;
- از نویسهٔ فعلی جلوتر نروید. معادل --p;.
- fexec <expr>;
- نویسهٔ فعلی را به چیز دیگری تنظیم میکند. معادل p = (<expr>)-1;.
- fgoto <label>;
- پرش به ماشین تعریفشده با <label>.
- fgoto *<expr>;
- پرش به نقطهٔ ورود ارائهشده توسط <expr>. این عبارت باید به یک مقدار عدد صحیح نمایانگر یک وضعیت ارزیابی شود.
- fnext <label>;
- تنظیم وضعیت بعدی روی نقطهٔ ورود تعریفشده با <label>. دستور fnext بلافاصله به وضعیت مشخصشده پرش نمیکند. هر کد کنشی که پس از این دستور بیاید اجرا میشود.
- fnext *<expr>;
- تنظیم وضعیت بعدی روی نقطهٔ ورود ارائهشده توسط <expr>. این عبارت باید به یک مقدار عدد صحیح نمایانگر یک وضعیت ارزیابی شود.
- fcall <label>;
- فراخوانی ماشین تعریفشده با <label>. دستور fret بعدی به وضعیت هدف گذاری که کنش روی آن فراخوانی شده است پرش خواهد کرد.
- fcall *<expr>;
- فراخوانی نقطهٔ ورود ارائهشده توسط <expr>. دستور fret بعدی به وضعیت هدف گذاری که کنش روی آن فراخوانی شده است پرش خواهد کرد.
- fret;
- بازگشت به وضعیت هدفِ گذاری که آخرین fcall روی آن انجام شده است.
- fbreak;
- ذخیره وضعیت فعلی و خروج فوری از ماشین..SH "دستاندرکاران (CREDITS)" Ragel توسط Adrian Thurston <thurston@colm.net> نوشته شده است. مشارکتکنندگان بسیاری در این پروژه نقش داشتهاند. لطفاً فایل CREDITS را در توزیع کد منبع مشاهده کنید.
همچنین ببینید (SEE ALSO)
| @PUBDATE@ | Ragel @VERSION@ |