PARSO(1) parso PARSO(1)

python-parso - مستندات کتابخانه تجزیه‌کننده پایتون parso

انتشار نسخه v0.8.7. (نصب <>)

کتابخانه Parso یک تجزیه‌کننده پایتون است که از بازیابی خطا (error recovery) و تجزیه رفت و برگشتی (round-trip parsing) برای نسخه‌های مختلف پایتون (در چندین نسخه پایتون) پشتیبانی می‌کند. Parso همچنین قادر است چندین خطای نحوی را در فایل پایتون شما فهرست کند.

کتابخانه Parso توسط jedi https://github.com/davidhalter/jedi در شرایط عملی و سنگین آزموده شده است. این ابزار از jedi جدا شد تا برای سایر پروژه‌ها نیز قابل استفاده باشد.

کتابخانه Parso شامل یک API کوچک برای تجزیه پایتون و تحلیل درخت نحو است.

یک مثال ساده:

>>> import parso
>>> module = parso.parse('hello + 1', version="3.9")
>>> expr = module.children[0]
>>> expr
PythonNode(arith_expr, [<Name: hello@1,0>, <Operator: +>, <Number: 1>])
>>> print(expr.get_code())
hello + 1
>>> name = expr.children[0]
>>> name
<Name: hello@1,0>
>>> name.end_pos
(1, 5)
>>> expr.end_pos
(1, 9)

برای فهرست کردن چندین مورد یا خطا:

>>> grammar = parso.load_grammar()
>>> module = grammar.parse('foo +\nbar\ncontinue')
>>> error1, error2 = grammar.iter_errors(module)
>>> error1.message
'SyntaxError: invalid syntax'
>>> error2.message
"SyntaxError: 'continue' not properly in loop"

در هر سیستمی می‌توانید parso را مستقیماً از شاخص بسته‌های پایتون (PyPI) با استفاده از pip نصب کنید:

sudo pip install parso

اگر می‌خواهید نسخه توسعه جاری (شاخه master) را نصب کنید:

sudo pip install -e git+https://github.com/davidhalter/parso.git#egg=parso

اگر ترجیح می‌دهید از یک نصب‌کننده خودکار بسته استفاده نکنید، می‌توانید یک نسخه جاری از parso را دانلود کرده https://github.com/davidhalter/parso/archive/master.zip و آن را به صورت دستی نصب کنید.

برای نصب آن، در کنسول خود به دایرکتوری حاوی setup.py رفته و تایپ کنید:

sudo python setup.py install

کتابخانه parso بر مبنای گرامرها کار می‌کند. شما می‌توانید به سادگی با فراخوانی parso.load_grammar() گرامرهای پایتون را بسازید. گرامرها (همراه با توکن‌ساز سفارشی و درخت‌های تجزیه سفارشی) را نیز می‌توان با نمونه‌سازی مستقیم از parso.Grammar() ایجاد کرد. اطلاعات بیشتر درباره اشیاء حاصل را می‌توانید در مستندات درخت تجزیه‌کننده <#parser-tree> بیابید.

ساده‌ترین روش استفاده از parso حتی بدون بارگذاری گرامر است (parso.parse()):

>>> import parso
>>> parso.parse('foo + bar')
<Module: @1-1>

به طور معمول اگر می‌خواهید با یک نسخه مشخص از پایتون کار کنید، از این دستور استفاده کنید:

یک parso.Grammar را بارگذاری می‌کند. نسخه پیش‌فرض، نسخه جاری پایتون است.
پارامترها (Parameters)

یک شیء گرامر دریافت خواهید کرد که می‌توانید از آن برای تجزیه کد و یافتن اشکالات موجود در آن استفاده کنید:

تابع parso.load_grammar() نمونه‌هایی از این کلاس را برمی‌گرداند.

ایجاد گرامرهای سفارشی غیر پایتونی با فراخوانی این کلاس هنوز پشتیبانی نمی‌شود.

پارامترها (Parameters)
text -- نمایش BNF از گرامر شما.
اگر قصد تجزیه یک فایل پایتون را دارید، به احتمال زیاد باید از اینجا شروع کنید.

اگر به کنترل دقیق‌تری روی نمونه تجزیه‌شده نیاز دارید، روش‌های دیگری برای دسترسی به آن وجود خواهد داشت.

پارامترها (Parameters)
  • code (str https://docs.python.org/3/library/stdtypes.html#str) -- یک رشته یونیکد یا بایت. هنگامی که امکان رمزگشایی بایت‌ها به رشته وجود نداشته باشد، یک UnicodeDecodeError https://docs.python.org/3/library/exceptions.html#UnicodeDecodeError بازمی‌گرداند.
  • error_recovery (bool https://docs.python.org/3/library/functions.html#bool) -- در صورت فعال بودن، هر کدی بازگردانده می‌شود. اگر کد نامعتبر باشد، به صورت یک گره خطا بازگردانده خواهد شد. در صورت غیرفعال بودن، هنگام مواجهه با خطاهای نحوی در کد خود با ParseError مواجه خواهید شد.
  • start_symbol (str https://docs.python.org/3/library/stdtypes.html#str) -- قاعده گرامر (پایان‌ناپذیر یا nonterminal) که می‌خواهید تجزیه کنید. تنها زمانی مجاز به استفاده است که error_recovery برابر False باشد.
  • path (str https://docs.python.org/3/library/stdtypes.html#str) -- مسیر فایلی که می‌خواهید باز کنید. فقط برای حافظه موقت (کش) مورد نیاز است.
  • cache (bool https://docs.python.org/3/library/functions.html#bool) -- در صورت ارائه مسیر، رونوشتی از درخت تجزیه‌کننده را در حافظه RAM و دیسک نگه می‌دارد. در صورتی که فایل‌های متناظر روی دیسک تغییر نکرده باشند، درخت‌های کش‌شده را بازمی‌گرداند. توجه داشته باشید که این گزینه فایل‌های pickle را روی سیستم فایل شما ذخیره می‌کند (به عنوان مثال برای لینوکس در ~/.cache/parso/).
  • diff_cache (bool https://docs.python.org/3/library/functions.html#bool) -- ماژول پایتون کش‌شده را با کد جدید مقایسه کرده (diff) و تلاش می‌کند تنها بخش‌هایی را که تغییر کرده‌اند تجزیه کند. همان ماژول (تغییریافته) موجود در کش را بازمی‌گرداند. استفاده از این گزینه مستلزم آن است که دیگر هیچ عملیاتی با ماژول‌های کش‌شده تحت آن مسیر انجام ندهید، زیرا محتویات آن ممکن است تغییر کند. این گزینه همچنان تا حدی آزمایشی است. اگر به پایداری نیاز دارید، لطفاً از آن استفاده نکنید.
  • cache_path (bool https://docs.python.org/3/library/functions.html#bool) -- در صورت مشخص شدن، حافظه موقت parso را در این دایرکتوری ذخیره می‌کند. در صورت عدم تعیین، به مسیرهای کش پیش‌فرض در هر پلتفرم متوسل می‌شود.
مقادیر بازگشتی (Returns)
یک زیرکلاس از parso.tree.NodeOrLeaf <#parso.tree.NodeOrLeaf>. به طور معمول یک parso.python.tree.Module <#parso.python.tree.Module>.
با دریافت یک parso.tree.NodeOrLeaf <#parso.tree.NodeOrLeaf> یک مولد از اشیاء parso.normalizer.Issue بازمی‌گرداند. برای پایتون این یک فهرست از خطاهای نحوی/فاصله‌گذاری (syntax/indentation) است.

کتابخانه parso قادر به یافتن چندین خطا در کد منبع شماست. پیمایش این خطاها نمونه‌های زیر را به دست می‌دهد:

یک کد عدد صحیح که نوع خطا را نشان می‌دهد.
یک پیام (رشته) برای اشکال یا خطای مربوطه.
موقعیت شروع خطا به صورت یک چندتایی (line, column). همانند همیشه در parso شماره خط اول ۱ و ستون اول ۰ است.

کتابخانه parso همچنین توابع کمکی مفیدی ارائه می‌دهد:

یک تابع کمکی برای اجتناب از بارگذاری دستی گرامرها. پارامترها در parso.Grammar.parse() مستند شده‌اند.
پارامترها (Parameters)
version (str https://docs.python.org/3/library/stdtypes.html#str) -- نسخه‌ای که توسط parso.load_grammar() استفاده می‌شود.
برای کدهای پایتون در نظر گرفته شده است. بر خلاف str.splitlines() https://docs.python.org/3/library/stdtypes.html#str.splitlines در پایتون، کاراکترهای پرش به صفحه جدید (form feeds) و سایر نویسه‌های خاص را به عنوان متن عادی در نظر می‌گیرد. فقط بر اساس \n و \r\n خطوط را جدا می‌کند. همچنین تفاوت دیگر: برای ورودی رشته خالی، [""] بازمی‌گرداند.

در پایتون 2.7 هنگام استفاده از str.splitlines کاراکترهای form feed به عنوان نویسه‌های عادی استفاده می‌شدند. با این حال در پایتون ۳ تصمیمی گرفته شد که بر اساس form feed نیز جداسازی انجام شود.

وجود BOMهای یونیکد و اعلانات انکودینگ PEP 263 را بررسی می‌کند. سپس یک شیء یونیکد مشابه bytes.decode() https://docs.python.org/3/library/stdtypes.html#bytes.decode بازمی‌گرداند.
پارامترها (Parameters)

درخت تجزیه با فراخوانی parso.Grammar.parse() <#parso.Grammar.parse> بازگردانده می‌شود.

یادداشت:

توجه داشته باشید که موقعیت‌ها در parso برای خطوط همیشه ۱-مبنا (1-based) و برای ستون‌ها صفر-مبنا (0-based) هستند. این بدان معناست که نخستین موقعیت در یک فایل (1, 0) است.

به‌طور کلی دو نوع کلاس وجود دارد که با آن‌ها سر و کار خواهید داشت: parso.tree.Leaf و parso.tree.BaseNode.

Bases: NodeOrLeaf

کلاس پایه (super class) برای تمام گره‌ها. یک گره دارای فرزندان، یک نوع (type) و احتمالاً یک گره والد است.

فهرستی از گره‌های فرزند NodeOrLeaf.
موقعیت آغازین پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
موقعیت start_pos پیشوند را بازمی‌گرداند. این عملاً به این معنی است که end_pos آخرین پیشوند را بازمی‌گرداند. مقدار get_start_pos_of_prefix() برای پیشوند + در 2 + 1 برابر (1, 1) خواهد بود، در حالی که start_pos برابر (1, 2) است.
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
موقعیت پایانی پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
کدی را بازمی‌گرداند که ورودی تجزیه‌کننده برای این گره بوده است.
پارامترها (Parameters)
include_prefix -- پیشوند (فاصله‌های خالی و کامنت‌ها) مثلاً یک عبارت را حذف می‌کند.
برگ (parso.tree.Leaf) موجود در position را دریافت می‌کند.
پارامترها (Parameters)
مقادیر بازگشتی (Returns)
شیء parso.tree.Leaf در position یا None
نخستین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
آخرین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
Bases: NodeOrLeaf

برگ‌ها اساساً توکن‌هایی با رابط برنامه‌نویسی (API) بهتر هستند. برگ‌ها دقیقاً می‌دانند در کجا تعریف شده‌اند و چه متنی پیش از آن‌ها قرار دارد.

str() مقدار توکن جاری.
str() معمولاً ترکیبی از فاصله‌های خالی و کامنت‌ها؛ مواردی که از نظر نحوی برای درخت نحو بی‌اهمیت هستند.
موقعیت آغازین پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
موقعیت start_pos پیشوند را بازمی‌گرداند. این عملاً به این معنی است که end_pos آخرین پیشوند را بازمی‌گرداند. مقدار get_start_pos_of_prefix() برای پیشوند + در 2 + 1 برابر (1, 1) خواهد بود، در حالی که start_pos برابر (1, 2) است.
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
نخستین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
آخرین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
کدی را بازمی‌گرداند که ورودی تجزیه‌کننده برای این گره بوده است.
پارامترها (Parameters)
include_prefix -- پیشوند (فاصله‌های خالی و کامنت‌ها) مثلاً یک عبارت را حذف می‌کند.
موقعیت پایانی پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)

تمام گره‌ها و برگ‌ها دارای این متدها و خصوصیات هستند:

Bases: object https://docs.python.org/3/library/functions.html#object

کلاس پایه برای گره‌ها و برگ‌ها.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
گره والد (BaseNode) این گره یا برگ. در صورت ریشه بودن گره، مقدار آن None خواهد بود.
گره ریشه یک درخت تجزیه را بازمی‌گرداند. گره بازگردانده‌شده بر خلاف سایر گره‌ها و برگ‌ها گره والد ندارد.
گره‌ای را بازمی‌گرداند که بلافاصله پس از این گره در فهرست فرزندان والد آن قرار دارد. اگر این گره هم‌نیای بعدی نداشته باشد، None است.
گره‌ای را بازمی‌گرداند که بلافاصله پیش از این گره در فهرست فرزندان والد آن قرار دارد. اگر این گره هم‌نیای قبلی نداشته باشد، None است.
برگ قبلی در درخت تجزیه را بازمی‌گرداند. اگر این عنصر نخستین عنصر در درخت تجزیه باشد، None بازمی‌گرداند.
برگ بعدی در درخت تجزیه را بازمی‌گرداند. اگر این عنصر آخرین عنصر در درخت تجزیه باشد، None بازمی‌گرداند.
موقعیت آغازین پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
موقعیت پایانی پیشوند را به‌صورت یک تاپل بازمی‌گرداند؛ مانند (3, 4).
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
موقعیت start_pos پیشوند را بازمی‌گرداند. این عملاً به این معنی است که end_pos آخرین پیشوند را بازمی‌گرداند. مقدار get_start_pos_of_prefix() برای پیشوند + در 2 + 1 برابر (1, 1) خواهد بود، در حالی که start_pos برابر (1, 2) است.
تاپل بازگشتی از نوع عدد صحیح (Return tuple of int)
(خط، ستون)
نخستین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
آخرین برگ یک گره یا خود شیء را در صورت برگ بودن بازمی‌گرداند.
کدی را بازمی‌گرداند که ورودی تجزیه‌کننده برای این گره بوده است.
پارامترها (Parameters)
include_prefix -- پیشوند (فاصله‌های خالی و کامنت‌ها) مثلاً یک عبارت را حذف می‌کند.
به‌صورت بازگشتی والدین این گره یا برگ را بررسی می‌کند و نخستین گره یافت‌شده منطبق با node_types را بازمی‌گرداند. در صورت نیافتن گره منطبق، مقدار None بازگردانده می‌شود.
پارامترها (Parameters)
node_types -- نام انواعی که جستجو می‌شوند.
یک خروجی ساختاریافته (dump) از درخت تجزیه به ریشه این گره یا برگ بازمی‌گرداند. این قابلیت عمدتاً برای مقاصد اشکال‌زدایی مفید است.

پارامتر indent مشابه با ast.dump() https://docs.python.org/3/library/ast.html#ast.dump تفسیر می‌شود. اگر indent یک عدد صحیح غیرمنفی یا رشته باشد، درخت با آن سطح تورفتگی به‌صورت خوانا (pretty-print) نمایش داده می‌شود. سطح تورفتگی صفر، منفی یا "" تنها خط جدید درج می‌کند. مقدار None نمایش تک‌خطی را انتخاب می‌کند. استفاده از یک عدد صحیح مثبت به همان تعداد فاصله در هر سطح تورفتگی ایجاد می‌کند. اگر indent یک رشته باشد (مانند "\t")، از آن رشته برای تورفتگی هر سطح استفاده می‌شود.

پارامترها (Parameters)
indent -- سبک تورفتگی همان‌طور که در بالا توضیح داده شد. تورفتگی پیش‌فرض ۴ فاصله است که خروجی مرتب و خوانایی تولید می‌کند.
>>> import parso
>>> print(parso.parse("lambda x, y: x + y").dump())
Module([
    Lambda([
        Keyword('lambda', (1, 0)),
        Param([
            Name('x', (1, 7), prefix=' '),
            Operator(',', (1, 8)),
        ]),
        Param([
            Name('y', (1, 10), prefix=' '),
        ]),
        Operator(':', (1, 11)),
        PythonNode('arith_expr', [
            Name('x', (1, 13), prefix=' '),
            Operator('+', (1, 15), prefix=' '),
            Name('y', (1, 17), prefix=' '),
        ]),
    ]),
    EndMarker('', (1, 18)),
])

این درخت نحو برای نحوهای پایتون ۳ است. کلاس‌ها عناصر نحوی مانند توابع و دستورات وارد کردن (imports) را نشان می‌دهند.

تمامی گره‌ها را می‌توان تا فایل گرامر پایتون https://docs.python.org/3/reference/grammar.html ردیابی کرد. اگر می‌خواهید بدانید یک درخت چگونه ساختار یافته است، کافی است آن فایل را بررسی کنید (که برای هر نسخه پایتون کمی متفاوت است).

منطق زیادی در اینجا پیاده شده است که کار با درخت نحو پایتون را برای Jedi (و سایر کتابخانه‌ها) ساده‌تر می‌کند.

با استفاده از parso.tree.NodeOrLeaf.get_code() روی یک ماژول، می‌توانید نمایش متناظر یک‌به‌یک ورودی داده‌شده به تجزیه‌کننده را دریافت کنید. این ویژگی هنگام بازآفرینی (refactor) یک درخت تجزیه بسیار مهم است.

>>> from parso import parse
>>> parser = parse('import os')
>>> module = parser.get_root_node()
>>> module
<Module: @1-1>

هر زیرکلاسی از Scope، از جمله Module، دارای مشخصه iter_imports است:

>>> list(module.iter_imports())
[<ImportName: import os@1,0>]

با بررسی فایل‌های گرامر پایتون، چند مورد تغییر کرده است:

  • کلاس Param در فایل‌های گرامر پایتون وجود ندارد؛ این بخش در اصل جزئی از یک گره parameters است. کتابخانه parso آن را تفکیک می‌کند تا تحلیل پارامترها آسان‌تر شود. با این حال این کار تنها تعامل با درخت نحو را راحت‌تر می‌کند و نحو معتبر را تغییر نمی‌دهد.
  • چند گره مانند lambdef و lambdef_nocond در درخت نحو ادغام شده‌اند تا کار با آن‌ها ساده‌تر گردد.
Bases: object https://docs.python.org/3/library/functions.html#object

برخی ابزارهای کمکی ویژه پایتون.

با دریافت یک تاپل (خط، ستون)، شیء Name مربوطه را بازمی‌گرداند یا اگر نامی در آن موقعیت وجود نداشته باشد مقدار None بازمی‌گرداند.
Bases: _LeafWithoutNewlines

یک رشته. گاهی اوقات مهم است بدانیم آیا رشته متعلق به یک نام (شناسه) است یا خیر.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
در صورتی که نام در حال تعریف شدن باشد مقدار True بازمی‌گرداند.
اگر تعریفی برای نام وجود نداشته باشد مقدار None بازمی‌گرداند.
پارامترها (Parameters)
import_name_always -- مشخص می‌کند که آیا نام واردشده (import name) همیشه یک تعریف به حساب می‌آید یا خیر. به طور معمول foo در عبارت from foo import bar یک تعریف نیست.
Bases: PythonLeaf

رشته‌های قالب‌بندی‌شده (f-strings) حاوی عبارات f-string و رشته‌های عادی پایتون هستند. این کلاس بخش‌های رشته‌ای f-stringها را نشان می‌دهد.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: PythonLeaf

رشته‌های قالب‌بندی‌شده (f-strings) حاوی عبارات f-string و رشته‌های عادی پایتون هستند. این کلاس بخش آغازین f-stringها را نشان می‌دهد.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: PythonLeaf

رشته‌های قالب‌بندی‌شده (f-strings) حاوی عبارات f-string و رشته‌های عادی پایتون هستند. این کلاس بخش پایانی f-stringها را نشان می‌دهد.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: PythonBaseNode, DocstringMixin

کلاس والد برای درخت تجزیه که وضعیت یک فایل متنی پایتون را نشان می‌دهد. یک محدوده (Scope) یا یک تابع، کلاس یا لامبدا (lambda) است.

تولیدکننده‌ای (generator) از گره‌های funcdef بازمی‌گرداند.
تولیدکننده‌ای از گره‌های classdef بازمی‌گرداند.
تولیدکننده‌ای از گره‌های import_name و import_from بازمی‌گرداند.
بخشی را که توسط تابع اجرا می‌شود بازمی‌گرداند.
Bases: Scope

بالاترین محدوده (top scope) که همیشه یک ماژول است. بسته به تجزیه‌کننده زیرین، این ممکن است یک ماژول کامل یا تنها بخشی از یک ماژول باشد.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
تمام برگ‌های Name موجود در این ماژول را بازمی‌گرداند. این شامل هر دو مورد تعاریف و ارجاعات نام‌ها می‌شود.
Bases: PythonBaseNode
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: Scope
برگ Name را بازمی‌گرداند که نام تابع یا کلاس را تعریف می‌کند.
نوع بازگشتی (Return type)
فهرستی از Decorator
Bases: ClassOrFunc

برای ذخیره محتوای تجزیه‌شده یک کلاس پایتون استفاده می‌شود.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
گره arglist را که کلاس‌های والد (super classes) را تعریف می‌کند بازمی‌گرداند. در صورت نبود آرگومان، مقدار None بازمی‌گرداند.
Bases: ClassOrFunc

برای ذخیره محتوای تجزیه‌شده یک تابع پایتون استفاده می‌شود.

فرزندان:

0. <Keyword: def>
1. <Name>
2. فهرست پارامترها (شامل عملگرهای <Operator> پرانتز باز و بسته)
3. یا 5. <Operator: :>
4. یا 6. Node() که بدنه تابع را نشان می‌دهد
3. -> (در صورت وجود یادداشت نوع)
4. یادداشت نوع (در صورت وجود)
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Param() بازمی‌گرداند.
برگ Name را بازمی‌گرداند که نام تابع یا کلاس را تعریف می‌کند.
تولیدکننده‌ای از yield_expr بازمی‌گرداند.
تولیدکننده‌ای از return_stmt بازمی‌گرداند.
تولیدکننده‌ای از raise_stmt بازمی‌گرداند؛ شامل عبارات raise درون بلوک‌های try-except.
مقدار بولی بازگشتی (Return bool)
بررسی می‌کند که آیا تابع یک مولد (generator) است یا خیر.
گره آزمون (test node) پس از -> یا در صورت عدم وجود یادداشت نوع، None را بازمی‌گرداند.
Bases: Function

توابع لامبدا (Lambdas) اساساً توابع خلاصه‌شده هستند، بنابراین همان رابط را ارائه می‌دهند.

فرزندان:

 0. <Keyword: lambda>
 *. <Param x> به ازای هر آرگومان x
-2. <Operator: :>
-1. Node() نشان‌دهنده بدنه
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
خطای AttributeError ایجاد می‌کند؛ لامبداها نام تعریف‌شده‌ای ندارند.
مقدار None بازمی‌گرداند؛ لامبداها یادداشت نوع ندارند.
Bases: Flow
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
به عنوان مثال تمام گره‌های test را که در زیر به نام x آمده‌اند بازمی‌گرداند:
pass
pass
شاخه‌ای را که گره در آن قرار دارد جستجو کرده و گره آزمون متناظر را بازمی‌گرداند (به تابع بالا مراجعه کنید). با این حال اگر گره در خود گره آزمون باشد و نه در بلوک اجرایی (suite)، مقدار None بازمی‌گرداند.
بررسی می‌کند که آیا یک گره پس از else تعریف شده است یا خیر.
Bases: Flow
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: Flow
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
گره ورودی y را از عبارت for x in y: بازمی‌گرداند.
Bases: Flow
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
گره‌های test یافت‌شده در گره‌های except_clause را بازمی‌گرداند. برای بندهای except بدون مشخص کردن استثنا، مقدار [None] بازمی‌گرداند.
Bases: Flow
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Name را که عبارت with تعریف می‌کند بازمی‌گرداند. نام‌های تعریف‌شده پس از as قرار می‌گیرند.
Bases: PythonBaseNode
مسیر، فهرستی از نام‌ها است که به نام مورد جستجو منتهی می‌شود.
فهرستی از Name (Return list of Name)
Bases: Import
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Name را که دستور import تعریف می‌کند بازمی‌گرداند. نام‌های تعریف‌شده پس از import قرار می‌گیرند یا در صورت وجود نام مستعار - as - آن نام بازگردانده می‌شود.
پارامتر level در متد __import__.
مسیرهای وارد کردن تعریف‌شده در یک عبارت import. معمولاً آرایه‌ای شبیه به این است: [<Name: datetime>, <Name: date>].
فهرستی از فهرست‌های Name (Return list of list of Name)
Bases: Import

برای گره‌های import_name. دستورات وارد کردن عادی بدون from را پوشش می‌دهد.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Name را که دستور import تعریف می‌کند بازمی‌گرداند. نام تعریف‌شده همیشه نخستین نام پس از import است یا در صورت وجود نام مستعار - as - آن نام بازگردانده می‌شود.
پارامتر level در متد __import__.
حالت خاص وارد کردن‌های تو در تو، بدون نام مستعار و بدون دستور from را بررسی می‌کند:
import foo.bar
Bases: PythonBaseNode

برای عبارات زیر: assert، del، global، nonlocal، raise، return، yield.

کلمات کلیدی pass، continue و break در اینجا قرار ندارند، زیرا فقط کلمات کلیدی ساده هستند و تجزیه‌کننده آن‌ها را به یک کلمه کلیدی تقلیل می‌دهد.

دستورات کلمه کلیدی با کلمه کلیدی شروع شده و با _stmt پایان می‌یابند. می‌توانید این موضوع را با گرامر پایتون مطابقت دهید.
Bases: PythonBaseNode
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: PythonBaseNode, DocstringMixin
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Name تعریف‌شده قبل از علامت = را بازمی‌گرداند.
سمت راست (right-hand-side) علامت مساوی را بازمی‌گرداند.
تولیدکننده‌ای از عملگرهای +=، = و غیره یا در صورت نبود هیچ عملیاتی None بازمی‌گرداند.
Bases: PythonBaseNode
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
Bases: PythonBaseNode

یک کلاس کمکی است که منطق کار با پارامترها را بسیار آسان‌تر می‌کند. گرامر پایتون هیچ گره param مستقلی تعریف نمی‌کند، بلکه آن را به شیوه‌ای دیگر تعریف می‌کند که برای کار با پارامترها چندان مناسب نیست.

نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
برای foo برابر 0، برای *foo برابر 1 یا برای **foo برابر 2 است.
مقدار پیش‌فرض، گره آزمونی است که پس از = ظاهر می‌شود. در صورت عدم وجود مقدار پیش‌فرض، برابر None است.
گره آزمونی است که پس از : ظاهر می‌شود. در صورت عدم وجود یادداشت نوع، برابر None است.
برگ Name مربوط به پارامتر.
ویژگی شاخص موقعیتی یک پارامتر.
تابع یا لامبدای والد یک پارامتر را بازمی‌گرداند.
مانند تمام توابع دیگر get_code، اما پارامتر include_comma را نیز شامل می‌شود.
پارامترها (Parameters)
bool (include_comma) -- در صورت فعال بودن، کاما را در رشته خروجی لحاظ می‌کند.
Bases: PythonBaseNode
نوع یک رشته است که معمولاً با انواع فایل گرامر مطابقت دارد.
فهرستی از Name را که عبارت درک (comprehension) تعریف می‌کند بازمی‌گرداند.
نام مستعار (alias) برای SyncCompFor
Bases: Mapping https://docs.python.org/3/library/collections.abc.html#collections.abc.Mapping

این کلاس صرفاً با هدف ایجاد یک دیکشنری تغییرناپذیر (immutable dict) ایجاد شده است.

به‌طور بازگشتی والدین یک گره را بررسی می‌کند و نخستین گره یافت‌شده منطبق با node_types را بازمی‌گرداند. در صورت نیافتن گره منطبق، مقدار None بازگردانده می‌شود.

این تابع منسوخ شده است؛ به جای آن از NodeOrLeaf.search_ancestor() استفاده کنید.

پارامترها (Parameters)
  • node -- اجداد این گره بررسی خواهند شد.
  • node_types -- نام انواعی که جستجو می‌شوند.

اگر تمایل به هرگونه مشارکت در توسعه parso دارید، برای بحث و گفتگو یک issue یا pull request باز کنید. ما از تغییرات استقبال می‌کنیم! لطفاً ابتدا فایل CONTRIBUTING.md موجود در مخزن را بررسی کنید.

فرآیند منسوخ‌سازی به شرح زیر است:

1.
منسوخ‌سازی در انتشار اصلی یا فرعی بعدی (major/minor release) اعلام می‌شود.
2.
پیش از حذف قابلیت منسوخ‌شده، حداقل یک سال و حداقل دو نسخه فرعی منتظر می‌مانیم.

مجموعه آزمون به pytest وابسته است:

pip install pytest

برای اجرای آزمون‌ها از دستور زیر استفاده کنید:

pytest

اگر می‌خواهید تنها یک نسخه خاص از پایتون (مثلاً پایتون ۳.۹) را تست کنید، به سادگی زیر قابل انجام است:

python3.9 -m pytest

آزمون‌ها همچنین به صورت خودکار در GitHub Actions https://github.com/davidhalter/parso/actions اجرا می‌شوند.

مشارکت‌کنندگان parso

مشارکت‌کنندگان parso

August 30, 2026 0.8