পাইথন একটি সুন্দর স্ক্রিপ্টিং ভাষা. এটি এমনকি আপনি এটি এর নিজস্ব পার্সার এবং কম্পাইলার ব্যবহার করার সুযোগ দেয়. এছাড়াও আপনি XML এবং স্ট্রিং টেমপ্লেট মত বিশেষ কাজের জন্য বিভিন্ন অন্যান্য পারজার অ্যাক্সেস দেয়.
কিন্তু কখনও কখনও আপনি আপনার নিজের পার্সার আছে করতে পারেন. এই জন্য pyPEG কি.
কি ঘটছে দ্রুত দেখুন পেতে, আমার ব্লগে pyPEG সঙ্গে XML একটি অবাধ ভাষা বিশ্লেষণ করতে কিভাবে এই নিবন্ধটি পড়ুন.
PEG কি
PEG পার্স এক্সপ্রেশন ব্যাকরণ মানে. প্রসঙ্গ বিনামূল্যে ভাষার জন্য রেগুলার এক্সপ্রেশন এর ধারণা মত কিছু আছে; আপনি মারা সম্পর্কে উইকিপিডিয়া নিবন্ধ মধ্যে খুঁজে পাবেন একটি সুস্পষ্ট ব্যাখ্যা.
খুটা সঙ্গে আপনি বিএনএফ সঙ্গে মত একই ভাষায় বর্ণনা করতে পারেন (এবং তারা এমনকি একই করছি).
একটি পার্সার-ইন্টারপ্রেটার কি?
প্রচলিত পারজার পার্স খুটা এবং উপরে নিচে ব্যবহার করে, কিন্তু এলআর (ঢ) বা কলিজা (ঢ) এবং নীচে আপ পার্সিং করা হয় না. এই পার্সার জেনারেটর বাস্তবায়নের ধারণা ফলাফল.
এলআর (ঢ) বা কলিজা (ঢ) পারজার সঙ্গে আপনাকে প্রথমে একটি DFA নিরূপণ করা প্রয়োজন, কারণ, সাধারণত আপনি পার্সার জেনারেটর আপনার জন্য এই কাজ করা যাক. ফলে ইনপুট, যা ছিল আপনার বিএনএফ ব্যাকরণ, জন্য একটি পার্সার বাস্তবায়ন হয়. এক একটি পার্সার বাস্তবায়ন একটি পার্সার জেনারেটর বিএনএফ থেকে একটি কম্পাইলার কল করতে পারেনি.
একটি পার্সার-ইন্টারপ্রেটার পরিবর্তে যেমন একটি কম্পাইলার হচ্ছে একজন দোভাষী হিসেবে কাজ করে. শুধু ইনপুট হিসাবে আপনার ব্যাকরণ দিতে, এবং এটি টেক্সট আউট বর্ণিত ভাষা পার্স. উত্পন্ন কোন প্রোগ্রাম হতে হবে.
pyPEG ব্যবহার করে
এর মানে হল যে: ব্যবহার করে pyPEG খুব সহজ;-) যদি আপনি ইতিমধ্যে রেগুলার এক্সপ্রেশন জানি, আপনি দ্রুত pyPEG ব্যবহার করা শিখতে হবে.
একটি ছোট নমুনা
একটি উদাহরণ: এই মত একটি সহজ ভাষায় মনে:
ফাংশন ফক (ঢ) {
& Nbsp; যদি (ঢ == 0) {// 0! সংজ্ঞা দ্বারা 1
& Nbsp; 1 ফিরে;
& Nbsp;} {অন্য
& Nbsp; ফিরে এন * ফক (ঢ - 1);
& Nbsp;};
}
যে ভাষার জন্য একটি pyPEG (এছাড়াও নমুনা স্ক্রিপ্ট দেখুন) নিম্নলিখিত কোড মত দেখায়:
Def মন্তব্য (): রিটার্ন [re.compile (দ "//.*"), re.compile ("/*.*?*/", re.S)]
Def আক্ষরিক (): ফিরে re.compile (". *" r'd * .d * | | D + ')
Def প্রতীক (): ফিরে re.compile (দ "W")
Def অপারেটর (): ফিরে re.compile (দ "+ + | - | * | / | ==")
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 মধ্যে নাম Tuple প্রতিস্থাপন (তালিকা খুব, মোটামুটি সামঞ্জস্যপূর্ণ, কিন্তু কম্পাইলার এন্ডের আরো বর্ণনামূলক কোড সমর্থন করে) বর্গ,.
কি সংস্করণ 1.2 নতুন:.
- ত্রুটি পরিচালনার মধ্যে ইউনিকোড সঙ্গে বাগ সংশোধন করা হয়েছে
সংস্করণ 1.1 নতুন কি:.
- ইউনিকোড সমর্থন যোগ করা হয়েছে
কি সংস্করণ 0.46 নতুন:.
- সত্য pyPEG.print_trace
- অঙ্গীভূতভাবে 2to3 ব্যবহার করে কাজ করে এখন পাইথন 3.x করতে pyPEG রূপান্তর করুন
- সেটিং দ্বারা ঐচ্ছিকরূপে আঁকা করা যাবে প্রয়োগ করা হয় যে ব্যাকরণ নিয়ম
- pyPEG আউটপুট হবে দ্বারা stderr এই ট্রেস.
সংস্করণ 0.45 নতুন কি:.
- সংশোধন করুন
কি সংস্করণ 0.44 নতুন:
- pyPEG এখন সোর্স ফাইল নাম এবং লাইন দিয়ে প্রতিটি pyAST বস্তুর decorates সংখ্যা.
আবশ্যক
- পাইথন
পাওয়া মন্তব্যসমূহ না