الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

pyparsing

بدأه ahmed_youssef في 4 ديسمبر 2009 · 4 رد · 789 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

Pyparsing هى وحدة بايثونية بتساعد لإنشاء Grammer وتنفيذه بأسلوب بديل ل lex/yacc وايضا كبديل لإستخدام التعبيرات المنتظمة Regular Expressions

لمعالجة نص مثل "Hello, World"

لاحظ انه ينقسم الى عبارة الترحيب و الكومة و "اللذى تمت تحيته" –ايه اسم المفعول منها ؟؟؟

خلاص جميل

from pyparsing import Word, alphas

هنا استدعينا Word, alphas

ال Word عبارة عن token بيتكون من مجموعة احرف وهنا هى ال alphas وهى string داخل pyparsing قيمتها حروف الأبجدية

greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here

هنا قمنا بتحديد الجرامر .... Token من الحروف الأبجدية ثم كومة ثم Token اخر من الحروف الأبجدية واخيرا علامة تعجب

hello = "Hello, World!"

هنا ال input اللى هنعالجه

print hello, "->", greet.parseString( hello )

وهنا بعد معالجته والنتائج

Hello, World! -> ['Hello', ',', 'World', '!']

http://pyparsing.wikispaces.com/

شئ مريح جدا بدل ماتعقد نفسك وانت بتكتب S-Expr Parser ولاحاجة :)

ملحوظة: ال snippet اللى استخدمناها فى الشرح هتلاقيها فى الصفحة الرئيسية للموقع

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 4 ديسمبر 2009 في 09:50

2
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#2

http://bitbucket.org/xmonader/pynetpbmparsers/

مشروع pynetpbmparsers بيهدف لتوفير معالجات ل pbm, pgm, ppm, and pam.

بيعتمد على pyparsing smiley.gif

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

كيف تنشئ ini parser بإستخدام pyparsing ؟

 

from pyparsing import Suppress, CharsNotIn, Word, alphanums, restOfLine, pythonStyleComment, OneOrMore


ini_dict={}
last_section=None

def handle_section(toks):
	global last_section
	tok = toks[0]
	last_section=tok
        ini_dict[last_section]={} #more fields under it
        
def handle_keyvalue(toks):
        global last_section
	k,v = [tok.lower() for tok in toks]
        if last_section is not None:
                ini_dict[last_section][k]=v	
        else:
                ini_dict[k]=v

#parsers
lb, rb, equals = map(Suppress, "[]=") #Left bracket, Right  bracket, Equal sign
hdr = (lb + CharsNotIn("]") + rb).setParseAction(handle_section)       #Header 
keyvalue = (Word(alphanums) + equals + restOfLine).setParseAction(handle_keyvalue) #till the end of the line
comment = pythonStyleComment           
iniparser = OneOrMore(hdr | keyvalue) 
iniparser.ignore(comment)



if __name__=="__main__":
        def test():
                x="""
        #product info
        [product]
        name=lalala app
        version=1.2 

        #author info
        [author]
        name=smart pants
        email=super@there.com


        """
                iniparser.parseString(x)

        test()
        print ini_dict

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 6 مارس 2013 في 21:39

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#4

سهل جدا ماشاء الله !

 

هل هذا يعتبر كبديل . للتعباير المنتضمة مثل نكتب حروف CAPITAL +SMULL 

 

اليس كذلك

salah.jpg

#5

في الداخل هي تعتمد على التعبيرات المنتظمة ولكن بالنسبة للمستخدم فهي طبقة أعلى جدا تسهل عمل الكثير من المهام الشاقة بطريقة بديلة

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader