פייתון היא שפת סקריפטים נחמדה. זה גם נותן לך גישה למנתח משלו ומהדר. זה גם נותן לך גישה למנתחים אחרים שונים למטרות מיוחדות כמו תבניות XML ומחרוזת.
אבל לפעמים ייתכן שתרצה יש לי המנתח שלך. זה מה שזה pyPEG ל.
כדי לקבל תצוגה מהירה על מה שקורה, בבקשה לקרוא את המאמר הזה על איך לנתח שפה שרירותית ל- XML עם pyPEG בבלוג שלי.
מהו PEG?
PEG אומר דקדוק ביטוי של ניתוח. זה משהו כמו הרעיון של ביטויים רגילים לשפות חופשיות הקשר; הסבר ברור מאוד שתמצא במאמר בויקיפדיה על PEG.
עם יתדות אתה יכול לתאר את אותו שפות כמו עם BNF (והם אפילו דומים).
מה הוא מנתח-Interpreter?
מנתחים משותפים אינכם משתמשים יתדות ומלמעלה למטה בניתוח, אבל LR (n) או LL (n) וניתוח מלמטה למעלה. התוצאה היא הרעיון של יישום גנרטורים מנתח.
כי עם LR (n) או LL (n) מנתחים אתה צריך לחשב את DFA הראשון, בדרך כלל אתה נותן גנרטור המנתח יעשה זאת עבורך. התוצאה היא יישום מנתח עבור דקדוק BNF שלך, שהיה הקלט. אפשר לקרוא גנרטור מנתח מהדר מBNF ליישום מנתח.
-Interpreter מנתח עושה את העבודה כמתורגמן במקום להיות מהדר כזה. רק תן לי הדקדוק שלך כקלט, וזה מנתח את השפה תיארה מתוך טקסט. לא תהיה תכנית שנוצרה.
שימוש בpyPEG
זה אומר: pyPEG באמצעות קל מאוד;-) אם אתה יודע בביטויים רגילים כבר, אתה תלמד להשתמש pyPEG במהירות.
מדגם קטן
דוגמא: לחשוב על שפה פשוטה, כמו זו:
FAK פונקציה (n) {
& Nbsp; אם (== n 0) {// 0! הוא 1 בהגדרה
& Nbsp; לחזור 1;
& Nbsp;} else {
& Nbsp; FAK תמורת n * (n - 1);
& Nbsp;};
}
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]
expressionlist def (): לחזור ביטוי, -1, (",", ביטוי)
returnstatement def (): מילת המפתח שיבה ("לחזור"), ביטוי
ifstatement def (): מילת המפתח שיבה ("אם"), "(", ביטוי, ")", בלוק, מילות מפתח ("אחר"), בלוק
הצהרת def (): שיבה [ifstatement, returnstatement], ";"
בלוק def (): שיבה "{", -2, הצהרה, "}"
parameterlist def (): שיבה "(", סמל, -1, (",", סמל), ")"
functioncall def (): לחזור סמל, "(", expressionlist, ")"
פונקצית def (): מילת המפתח שיבה ("פונקציה"), סמל, parameterlist, בלוק
def simpleLanguage (): פונקצית תמורה
מה חדש בהודעה זו:
- זוהי מהדורת ניקוי. הקוד של לנתח () ולהלחין () היה קבוע.
מהו
חדש בגרסה 1.4:.- גרסה זו מתקנת כמה באגים עם ניתוח packrat
מה חדשה בגרסה 1.3:
- החלפת tuple לשמות בpyAST על ידי הסמל (רשימה בכיתה), שהוא די תואם, אך תומך בקוד תיאורים יותר במסדי מהדר, מדי.
מה חדש בגרסת 1.2
- באגס עם Unicode בטיפול בשגיאות תוקן. >
מה חדש בגרסה 1.1:.
- תמיכת Unicode נוספה
מה חדש בגרסה 0.46:.
- pyPEG.print_trace לנכון
מה חדש בגרסה 0.45:.
- תיקוני באגים
מה חדש בגרסת 0.44:
- pyPEG עכשיו מעטר כל אובייקט pyAST עם שם קובץ המקור וקו מספר.
דרישות :
- Python
תגובות לא נמצא