پایتون یک زبان برنامه نویسی خوب است. حتی به شما می دهد به تجزیه و کامپایلر آن خود را دسترسی داشته باشید. این نیز به شما می دهد به تجزیه کننده های مختلف دیگر دسترسی برای مقاصد خاص مانند XML و رشته قالب.
اما گاهی اوقات شما ممکن است بخواهید به تجزیه کننده خود شما. این چیزی است که pyPEG برای.
برای دریافت یک نمایش سریع در آنچه اتفاق می افتد، لطفا خواندن این مقاله در مورد چگونگی تجزیه زبان دلخواه به XML با pyPEG در وبلاگ من.
PEG چیست؟
PEG به معنای دستور زبان بیان تجزیه. این چیزی شبیه به این ایده از عبارات منظم برای زبان رایگان زمینه است. یک توضیح بسیار روشن شما در مقاله ویکیپدیا در مورد PEG پیدا کنید.
با PEG ها شما می توانید به زبان همان مثل با BNF توصیف (و آنها حتی مشابه هستند).
تجزیه کننده-مترجم چیست؟
تجزیه کننده های مشترک در حال استفاده نیست PEG ها و از بالا به پایین تجزیه، اما LR (N) و یا LL (n) و از پایین به بالا تجزیه. این نتایج در این ایده از اجرای ژنراتور تجزیه کننده.
از آنجا که با LR (N) و یا LL (N) تجزیه کننده شما نیاز به محاسبه یک DFA اول، معمولا به شما اجازه ژنراتور تجزیه کننده این کار را برای شما. نتیجه اجرای تجزیه کننده برای دستور زبان BNF خود را، که در آن ورودی است. یک نفر می تواند یک ژنراتور تجزیه کننده یک کامپایلر از BNF به اجرای تجزیه کننده تماس بگیرید.
تجزیه کننده-مترجم کار به عنوان مترجم به جای اینکه مانند یک کامپایلر. فقط دستور زبان خود را به عنوان ورودی را، و آن را تجزیه زبان توصیف از متن. خواهد شد وجود ندارد برنامه تولید می شود.
با استفاده از pyPEG
این بدان معناست که: با استفاده از pyPEG بسیار آسان است؛-) اگر شما می دانید عبارات منظم در حال حاضر، به شما خواهد آموخت به استفاده از pyPEG به سرعت.
یک نمونه کوچک
به عنوان مثال: فکر می کنم از یک زبان ساده مثل این یکی:
تابع FAK (N) {
& nbsp؛ اگر (N == 0) {// 0! 1 است با تعریف
& nbsp؛ از بازگشت 1.
و nbsp؛} دیگری {
و nbsp؛ بازگشت N * FAK (N - 1).
و nbsp؛}؛
}
pyPEG برای آن زبان به نظر می رسد مانند کد زیر را (همچنین نگاه کنید به اسکریپت نمونه):
نظر دف (): بازگشت [re.compile (R "//.*")، re.compile ("/*.*؟*/"، re.S)]
دف تحت اللفظی (): re.compile بازگشت (".؟ *" r'd * * * * * * * * .d | | D +)
نماد دف (): re.compile بازگشت (R "W +")
دف اپراتور (): re.compile بازگشت (R "+ | - | * | / | ==")
عملیات دف (): نماد بازگشت، اپراتور، [تحت اللفظی، functioncall]
بیان دف (): بازگشت [تحت اللفظی، عمل، functioncall]
دف expressionlist (): بازگشت بیان، -1، ("،"، بیان)
دف returnstatement (): کلید واژه بازگشت ("بازگشت")، بیان
دف ifstatement (): کلید واژه بازگشت ("اگر")، "("، بیان، ")"، بلوک، کلمه کلیدی ("دیگری")، بلوک
بیانیه دف (): بازگشت [ifstatement، returnstatement]، "؛"
دف بلوک (): بازگشت "{"، -2، بیانیه، "}"
دف parameterlist (): بازگشت "("، نماد، -1، ("،"، نماد)، ")"
دف functioncall (): بازگشت نماد، "("، expressionlist، ")"
تابع دف (): کلید واژه بازگشت ("تابع")، نماد، parameterlist، بلوک
دف simpleLanguage (): تابع بازگشت
چه جدید در این نسخه است:
این یک نسخه پاکسازی است. کد پارسه () و آهنگسازی () ثابت شد.
چه جدید در نسخه 1.4 است:
در این نسخه به رفع برخی از اشکالات با تجزیه packrat.
چه در نسخه 1.3 جدید است:
به جایگزینی تاپل برای نام در pyAST با علامت (فهرست) کلاس، که نسبتا سازگار، اما پشتیبانی از کد توصیفی بیشتر در پایانه (Backend) کامپایلر، بیش از حد.
جدید در نسخه 1.2 است:
به اشکالات با یونیکد در رفع خطا ثابت شد.
جدید در نسخه 1.1 است:
پشتیبانی یونیکد اضافه شد.
به واقعی
pyPEG.print_trace:
جدید در نسخه 0.46 است.
تبدیل pyPEG به های 3.x پایتون در حال حاضر با این نسخهها کار یکپارچه با استفاده از 2to3
قواعد دستور زبان های مورد استفاده می تواند به صورت اختیاری با تنظیم ترسیم
pyPEG خروجی این ردیابی به stderr.
جدید در نسخه 0.45 است:
به رفع اشکالات.
جدید در نسخه 0.44 است:
در pyPEG در حال حاضر هر شی pyAST با نام فایل منبع و شماره خط تزیین.
مورد نیاز:
پایتون
نظر یافت نشد