|
Што такое Ragel?
Ragel кампілюе выкананы канчатковых аўтаматаў з рэгулярных моў. Ragel мэты C, C + +, Objective-C, D, Java і Ruby. стан машыны Ragel можа не толькі прызнаць паслядоўнасці байтаў, як рэгулярныя выразы машыны робяць, але таксама можа выконваць код у адвольных кропках у прызнанні рэгулярнай мовы. Кодэкс укладанне робіцца з дапамогай убудаваных аператараў, якія не парушаюць сінтаксіс рэгулярнай мовы.
Ядро мовы складаецца са стандартных аператараў рэгулярных выразаў (напрыклад, звяз, аб'яднанне і Клини зоркі) і дзеянняў аператараў укладання. рэгулярныя выразы карыстача кампілююцца ў дэтэрмінаваных дзяржаўнай машыны і ўбудаваныя дзеянні, злучаныя з пераходамі з машыны. Разуменне фармальныя адносіны паміж рэгулярнымі выразамі і дэтэрмінаваных канчатковых аўтаматаў з'яўляецца ключом да выкарыстання Ragel эфектыўна.
Ragel таксама падае аператарам, якія дазваляюць кіраваць любы не-дэтэрмінізм, які вы ствараеце, пабудаваць сканары, і пабудаваць стан машыны пры дапамозе Statechart мадэлі. Акрамя таго, можна ўплываць на выкананне дзяржаўнай машыны знутры ўбудаваных дзеянняў, скокнуўшы ці патэлефанаваўшы ў іншыя часткі машыны, ці перапрацоўцы ўваходу.
Ragel забяспечвае вельмі гнуткі інтэрфейс да базавых мовай, што спробы паставіць мінімальныя абмежаванні на генераванага кода інтэгравана ў прыкладанні. Згенераваны код не мае залежнасцяў.
action dgt { printf("DGT: %c\n", fc); }
action dec { printf("DEC:.\n"); }
action exp { printf("EXP: %c\n", fc); }
action exp_sign { printf("SGN: %c\n", fc); }
action number { /*NUMBER*/ }
number = (
[0-9]+ $dgt ('.' @dec [0-9]+ $dgt)?
([eE] ([+\-] $exp_sign)? [0-9]+ $exp)?
) %number;
main := (number '\n')*;
|
=> |
st0:
if (++p == pe)
goto out0;
if (48 <= (*p) && (*p) <= 57)
goto tr0;
goto st_err;
tr0:
{ printf("DGT: %c\n", (*p)); }
st1:
if (++p == pe)
goto out1;
switch ((*p)) {
case 10: goto tr5;
case 46: goto tr7;
case 69: goto st4;
case 101: goto st4;
}
if (48 <= (*p) && (*p) <= 57)
goto tr0;
goto st_err;
|
||
\/ |
|
Якія задачы Ragel добра?
- Даць надзейных рэалізацый пратаколу.
- Разбор фарматаў дадзеных.
- Лексічны аналіз моў праграмавання.
- Праверка карыстацкага ўводу.
Асаблівасці
- Пабудаваць канчатковых аўтаматаў з дапамогай:
- рэгулярных аператараў мовы
- дзяржаўных аператараў дыяграмы
- Сканар аператара
- некаторыя спалучэнні вышэй
- Уставіць дзеянняў у машыны ў адвольных месцах.
- Кіраванне недэтэрмінаваныя выкарыстаннем ахоўваная аператараў.
- Машыны Згарнуць станы з дапамогай алгарытму Хопкрофт.
- Візуалізуйце выйсце з Graphviz.
- Выкарыстоўвайце байт, падвойны байт ці слова памеру алфавітаў.
- Стварыць C, C + +, Objective-C, D, Java ці Ruby код без залежнасцяў.
- Абярыце з табліцы ці кіраванне струменем driven аўтаматаў.
Публікацыі
| [1] |
Adrian D. Терстон. "Разбор кампутара Мовы з аўтамата складзены на аснове аднаго рэгулярнага выраза". У 11-й Міжнароднай канферэнцыі па ўкараненні і ўжыванню аўтаматаў (CIAA 2006), Лекцыі па вылічальнай тэхніцы, аб'ём 4094, стар. 285-286, Тайпей, Тайвань, жнівень 2006. PDF. |
Дакументацыя, рэдактары і спіс рассылання
Ragel мае інструкцыю даступныя ў PDF фармаце, бо чалавек старонцы. Асноўныя рэлізы ўтрымоўваюць нумар версіі мовы змены. Гл. ChangeLog і выпуску падрабязна.
Калі вы выкарыстоўваеце Vim, ёсць сінтаксіс файла ragel.vim для рэдагавання задавальненне. Калі вы выкарыстоўваеце TextMate ёсць Ragel расслаенне Ragel.tmbundle.
Спіс рассылання Ragel можна азнаёміцца тут: Ragel-карыстачоў. Папытаеце пра дапамогу, пасля разбору праблемы, ці сказаць што вы думаеце о Ragel.
Спасылкі
- Выкарыстанне Ragel і XCode. спасылка
- Mongrel з'яўляецца бібліятэка HTTP і сервер для Ruby.
- Hpricot з'яўляецца разбор HTML і бібліятэка для працы з Ruby.
- RFuzz з'яўляецца разбуральнікам HTTP.
- Zed Shaw на Ragel дзяржавы Charts. спасылка
- SuperRedCloth гэта хутка ажыццяўленні Тэкстыль для Ruby.
- JSON парсер JSON і генератар для Ruby.
- Аналізатар JSON для Пайк. спасылка
- Lib2geom : вылічальныя бібліятэкі геаметрыі для Inkscape.
- Уту : інтэрнэт-сувязі з крыптаграфічнымі гвалтоўных ідэнтычнасці, рэпутацыі і адплаты.
- AppID : за адзін праход пратакол ідэнтыфікацыі прыкладання.
- RaSPF з'яўляецца бібліятэка SPF у С.
- Макет мовы выразаў (частка марнатраўства) з'яўляецца для пабудовы графічнага інтэрфейсу Swing з JRuby.
- Qfsm гэта графічная прылада для праектавання канчатковых аўтаматаў. Яна складаецца з функцыю Ragel экспарту.
- ABNF генератара з'яўляецца прыладай, які прымае граматык у ABNF і выйсці Ragel вызначэнняў.
- Perian з'яўляецца адным з кампанентаў QuickTime, які дадае ўбудаваная падтрымка большасці папулярных відэа фарматаў.
- devChix артыкулы: "Hello World" для Ruby на Ragel. (Абноўлена)
- Бразільскі партугальскі пераклад вышэй: Um Hello World пункт о Ruby ет Ragel 6,0
|
|
Прыклады
Ляск: сканар для простых З падобнай мовай. clang.rl
Паштовая скрыня: разбірае файлы паштовых скрынь Unix. Гэта разбівае файлы на асобныя паведамленні, загалоўкі ў паведамленні і органаў паведамленняў. mailbox.rl
AwkEmu: выконвае асноўныя разбору, што AWK праграмы выступае на ўваход. awkemu.rl
Atoi: пераўтворыць радок у лік. atoi.rl
Паралельнае: выконвае некалькі незалежных задач адначасова. concurrent.rl |
|
Statechart: машына Atoi пабудаваны з імем дзяржавы і спіс парадыгмы пераходу. statechart.rl
GotoCallRet: дэманстрацыя выкарыстанні fgoto, fcall, ірваць і fhold. gotocallret.rl
Параметры: аналізуе аргументы каманднага радка. params.rl
RagelScan: скануе Ragel уваходных файлаў. rlscan.rl
CppScan: C + + сканар, які выкарыстоўвае самы доўгі матч метад сканавання cppscan.rl |
Запампаваць
Распрацоўваная версія: Калі ласка, выкарыстоўвайце гэта для стварэння патчаў.
http://svn.complang.org/ragel/trunk/
Tar.gz: апошні рэліз версіі Ragel-6.6.tar.gz (сігналу).
Пажылыя: Папярэднія версіі даступныя тут.
Debian: на хатняй старонцы Debian пакет Ragel гэта тут. Гэта з'яўляецца Роберт Lemmen.
OpenPKG: Ragel была ўключана ў OpenPKG праекта.
FreeBSD: порт для Ragel даступны ў FreeBSD портаў.
NetBSD: Існуе пакет для Ragel у Pkgsrc базы дадзеных. |
|
Mac OS X: порт даступны ў MacPorts сховішча.
Crux: порт для Crux размеркаванні Linux даступная тут.
Gentoo: Gentoo порт даступны.
Suse: пакеты для Suse можна знайсці тут.
Windows: Ragel могуць быць скампіляваны з выкарыстаннем Cygwin ці MinGW. Binaries складзены з Visual Studio з'яўляюцца тут (6,6), пры ўмове, Джозаф Goettgens.
RedHat / Fedora: пакет для Ragel даступны ў Fedora Extras.
Slackware: пакет даступны на LinuxPackages.net |
Адкрыты ключ для пакета подпіс тут.
Ліцэнзія
Ragel выпушчаны пад ліцэнзіяй GNU General Public License. Копія ліцэнзіі знаходзіцца ў размеркаванні. Яна таксама даступная з GNU.
Нататка: часці выйсця Ragel капіююцца з крыніцы Ragel якія ахопліваюцца ліцэнзіяй GNU GPL. У якасці выключэння да GPL, вы можаце выкарыстоўваць часткі выйсця Ragel скапіяваны з Ragel крыніцы без абмежаванняў. Рэштка выходных Ragel з'яўляецца вытворным ад уваходнага і ўспадкоўвае прававы статут уваходнага файла. Выкарыстанне Ragel не дае ніякіх патрабаванняў пра ліцэнзію згенераваны код.
Крэдыты
Ragel была напісана Adrian Thurston. Першапачаткова ён быў распрацаваны напачатку 2000 гады і ўпершыню была выпушчана студзеня 2002 гады. Шматлікія людзі ўнеслі свой унёсак зваротнай сувязі, ідэі і код. Калі ласка, пагледзіце на КРЭДЫТЫ файл.
|
|