Python е приятно скриптов език. Той дори ви дава достъп до собствен анализатор и компилатор. Той също така ви дава достъп до различни други парсери за специални цели като XML и струнни шаблони.
Но понякога може да искате да имате собствен анализатор. Това е това, което е pyPEG за.
За да получите бърз поглед върху това, което се случва, моля, прочетете тази статия за това как да се направи разбор на произволен език за XML с pyPEG в моя блог.
<Силен> Какво е PEG? Силен>
PEG означава разбор Expression граматика. Това е нещо като идеята за регулярни изрази за контекстно свободните езици; много ясно обяснение, които ще намерите в статията в Уикипедия за PEG.
С PEGs ще може да опишете същите езици като с БНФ (и те са дори нещо подобно).
<Силен> Какво е Parser-Interpreter? Силен>
Общи парсери не използват PEG, и отгоре-надолу разбор, но LR (п) или LL (п) и разбор отдолу нагоре. Това води до идеята за прилагане на инструмента за синтактичен генератори.
Защото с LR (п) или LL (п) парсери трябва първо да се изчисли по една DFA, обикновено ви пусне генератор анализатор направи това за вас. Резултатът е изпълнението анализатор за вашия БНФ граматика, която е на входа. Човек може да се обадите на анализатор Генератор компилатор от БНФ до изпълнение на анализатор.
A Parser-Interpreter върши работа като преводач, вместо да бъде такъв компилатор. Просто даде своя граматика като вход, и го прави разбор на описана език от текст. Няма да има програма, генерирани.
<Силен> Използване pyPEG
Това означава: използване pyPEG е много лесно;-) Ако знаете регулярни изрази вече, ще се научите да използвате pyPEG бързо.
Малка проба
Един пример: сетя за по-прост език, като този:
функция FAK (п) {
& Nbsp; ако (п == 0) {// 0! е 1 по дефиниция
& Nbsp; върне 1;
& Nbsp;} още {
& Nbsp; връщане п * FAK (п - 1);
& Nbsp;};
}
A pyPEG за този език прилича следния код (виж също примерен скрипт):
Def коментар (): връщане [re.compile (R "//.*"), re.compile ("/*.*?*/", re.S)]
Def буквалното (): връщане re.compile (".? *" r'd * .d * | | г + ")
символ Def (): връщане re.compile (R "w +")
Операторът Def (): връщане re.compile (R "+ | - | * | / | ==")
операция Def (): връщане символ, оператор, [буквално, functioncall]
Def изразяване (): връщане [буквално, работа, functioncall]
Def expressionlist (): върнете изразяване, -1, (",", израз)
Def returnstatement (): връщане ключова дума ("Изход"), израз
Def ifstatement (): връщане ключова дума ("ако"), "(", израз, ")", блок, ключови думи ("друго"), блок
Декларация Def (): връщане [ifstatement, returnstatement], ";"
Def блок (): завръщане "{", -2, изявление, "}"
Def parameterlist (): завръщане "(", символ, -1, (",", символ), ")"
Def functioncall (): върнете символ, "(", expressionlist, ")"
Def функция (): връщане ключова дума ("функция"), символ, parameterlist, блок
Def simpleLanguage (): връщане функция
Какво ново в тази версия:
- Това е освобождаване почистване. Кодът на разбор () и композира () е фиксиран.
Какво ново във версия 1.4:.
- Тази версия определя някои бъгове с packrat разбор
Какво ново във версия 1.3:
- Подмяна на кортеж за имена в pyAST със символа (списък ) клас, което е доста съвместими, но поддържа по-описателно код в компилатора Неуспех, също.
Какво ново във версия 1.2:.
- Bugs с Unicode в обработка на грешки са фиксирани
Какво ново във версия 1.1:.
- е добавен подкрепа Unicode
Какво ново във версия 0.46:.
- pyPEG.print_trace да True
- Конвертиране pyPEG да Python 3.x сега работи безпроблемно използване 2to3
- според езиковите правила, които се прилагат може да бъде по избор проследено чрез създаването
- pyPEG ще изведе тази следа да STDERR.
Какво ново във версия 0.45:.
- Фиксирани бъгове
Какво ново във версия 0.44:
- pyPEG сега украсява всяка pyAST обект с името на файла източник и ред номер.
<силни> Изисквания :
- Python
Коментари не е намерена