Hướng dẫn parse in python example - phân tích cú pháp trong ví dụ python

Hướng dẫn parse in python example - phân tích cú pháp trong ví dụ python

Show

Đã đăng vào thg 3 8, 2019 4:22 SA 0 phút đọc

Parsing aguments từ command line dễ ẹc.

#!/urs/bin/env python 3

from argparse import ArgumentParser

def runner(testsuite):
    print ('OK OK! Minh Se Chay Test Suite {} Cho Ban'.format(testsuite))

def main():
    argparser = ArgumentParser('test_manager.py -ts test_suite')
    argparser.add_argument('-ts', '--test_suite', default=None, help='Ban nho nhap ten test_suite ')
    args = argparser.parse_args()
    test_suite_name = args.test_suite
    runner(test_suite_name)

if __name__ == "__main__":
    main()

Sau khi chạy command line, output:

>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban

Chạy sai thì nó nhắc lệnh, khỏi lo:

>test_manager.py -abc
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
test_manager.py -ts test_suite: error: unrecognized arguments: -abc

>test_manager.py -h
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]

optional arguments:
  -h, --help            show this help message and exit
  -ts TEST_SUITE, --test_suite TEST_SUITE
                        Ban nho nhap ten test_suite

Chúc các bạn thành công !

All rights reserved

Quy trình công việc cơ bản của công cụ Trình tạo trình phân tích cú pháp khá đơn giản: bạn viết một ngữ pháp xác định ngôn ngữ hoặc tài liệu và bạn chạy công cụ để tạo trình phân tích cú pháp có thể sử dụng từ mã Python của bạn.you write a grammar that defines the language, or document, and you run the tool to generate a parser usable from your Python code.parsing tokens into its meaningful lexical form so that the compiler or interpreter can convert it into its meaningful output. In this article, you will learn about the parsing in Python and what module helps in parsing.

Python sử dụng loại trình phân tích cú pháp nào?Show

  • Làm thí nghiệm.Vì trình phân tích cú pháp C được tạo là trình phân tích được sử dụng bởi Python, điều này có nghĩa là nếu có sự cố xảy ra khi thêm một số quy tắc mới vào ngữ pháp, bạn không thể biên dịch và thực hiện chính xác Python nữa.C parser is the one used by Python, this means that if something goes wrong when adding some new rules to the grammar you cannot correctly compile and execute Python anymore.
  • Every programming language does the process of parsing tokens into its meaningful lexical form so that the compiler or interpreter can convert it into its meaningful output. In this article, you will learn about the parsing in Python and what module helps in parsing.
  • Nội dung chính Show
  • What is Parsing?
  • Tạo đối tượng ST
  • Đối tượng ST
  • >>> code = compile('a + 5', 'file.py', 'eval')
    >>> a = 5
    >>> eval(code)
    10
    
    02. ________ 97 ________ 75 ()()¶
  • Hoạt động tương đương bằng cách sử dụng mô -đun
    >>> code = compile('a + 5', 'file.py', 'eval')
    >>> a = 5
    >>> eval(code)
    10
    
    3 có phần dài hơn và cho phép cây phân tích phân tích bên trong trung gian được giữ lại như một đối tượng ST:
  • >test_manager.py -abc
    usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
    test_manager.py -ts test_suite: error: unrecognized arguments: -abc
    
    >test_manager.py -h
    usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
    
    optional arguments:
      -h, --help            show this help message and exit
      -ts TEST_SUITE, --test_suite TEST_SUITE
                            Ban nho nhap ten test_suite
    
    4
  • Trình phân tích cú pháp là một chương trình là một phần của trình biên dịch và phân tích cú pháp là một phần của quy trình biên dịch.Phân tích cú pháp xảy ra trong giai đoạn phân tích tổng hợp.Trong phân tích cú pháp, mã được lấy từ bộ tiền xử lý, chia thành các phần nhỏ hơn và được phân tích để phần mềm khác có thể hiểu nó.code is taken from the preprocessor, broken into smaller pieces and analyzed so other software can understand it.
  • Phân tích cú pháp được định nghĩa là quá trình chuyển đổi mã thành ngôn ngữ máy để phân tích cú pháp chính xác của mã.Python cung cấp một thư viện gọi là trình phân tích cú pháp.the process of converting codes to machine language to analyze the correct syntax of the code. Python provides a library called a parser.

Làm thí nghiệm.Vì trình phân tích cú pháp C được tạo là trình phân tích được sử dụng bởi Python, điều này có nghĩa là nếu có sự cố xảy ra khi thêm một số quy tắc mới vào ngữ pháp, bạn không thể biên dịch và thực hiện chính xác Python nữa.C parser is the one used by Python, this means that if something goes wrong when adding some new rules to the grammar you cannot correctly compile and execute Python anymore.

Every programming language does the process of parsing tokens into its meaningful lexical form so that the compiler or interpreter can convert it into its meaningful output. In this article, you will learn about the parsing in Python and what module helps in parsing.is defined as the process of converting codes to machine language to analyze the correct syntax of the code. Python provides a library called a parser. For example, if an application takes data from the user and the data is not in the required format, in such cases you can use a parser that converts the data into the required format for further processing.

Phân tích cú pháp có thể được thực hiện theo nhiều cách như sử dụng mô -đun phân tích cú pháp, phân tích cú pháp thông qua biểu thức chính quy, phân tích cú pháp qua các phương thức chuỗi như các phương thức chia () và dải ().parser module, parsing through a regular expression, parsing through string methods like the split() and strip() methods.

Chúng ta hãy xem xét mã dưới đây để hiểu làm thế nào mô -đun phân tích cú pháp & nbsp; giúp phân tích cú pháp.parser module helps in parsing.

import parser
print("Input expression for parser module")
expression = "2 + 2"
print(" parsing the input expression")
parsing = parser.expr(expression)
print(parsing)
print(" Converting parsed object to code object")
code = parsing.compile()
print(code)
print(" Parsed result: ")
res = eval(code)
print(res)

Output:

Explanation:

Đầu tiên chúng tôi đã nhập mô -đun phân tích cú pháp sẽ giúp chúng tôi chứng kiến ​​quá trình phân tích cú pháp. Sau đó, chúng tôi có hàm in () để hiển thị thông báo đầu ra. Trình phân tích cú pháp.expr () lấy biểu thức python để phân tích nó vào đối tượng và cũng sẽ hiển thị vị trí bộ nhớ thập lục phân. Hàm in () khác sẽ hiển thị thông báo: Chuyển đổi đối tượng phân tích cú pháp thành đối tượng mã.parsing process. Then, we have the print() function to display a output message. The parser.expr() take the Python expression to parse it into object along and will also show the hexadecimal memory location. Another print() function will display the message: Converting parsed object to code object.

Trên dòng tiếp theo, chúng tôi đã sử dụng phương thức Parsing.comPile () thực hiện phân tích cú pháp biểu thức đối tượng để mã đối tượng. Mã có đầu ra tuân thủ. Trình phân tích cú pháp sau đó chuyển đối tượng & nbsp; thành một mô -đun cũng lấy một bộ nhớ khác & nbsp; vị trí. Để đánh giá mã được biên dịch, chúng tôi phải sử dụng hàm eval () mà chúng tôi sẽ lưu trữ trong đối tượng RES và hiển thị nó bằng in ().parser then churns the object into a module that also takes another memory location. To evaluate the compiled code we have to use the eval() function which we will store in the res object and display it using the print().

Ở đây, một biểu thức chuỗi không được kết hợp & nbsp; nhưng số lượng của nó hoạt động như các số nguyên (dẫn đến 2+2 = 4) vì biểu thức đó đã được phân tích cú pháp theo một cách tiếp cận khác.concatenating but its numbers were working as integers (resulting in 2+2 = 4) because that expression has been parsed in a different approach.

Conclusion:

Người thử nghiệm phần mềm & NBSP; và Đảm bảo chất lượng & NBSP; Nhóm tận dụng mô -đun này để thực hiện thử nghiệm khác nhau. Trong bài viết này, chúng tôi đã học được cách học cách phân tích cú pháp trong Python diễn ra và cách biểu hiện python & nbsp; được chuyển đổi thành dữ liệu từ định dạng này sang định dạng khác. and quality assurance team leverages this module to perform different testing. In this article, we have learned how learned how parsing in Python takes place and how Python expression gets converted to data from one format to another.

Mặc dù tận dụng một mô -đun phân tích cú pháp riêng biệt không phân tích cú pháp gấp đôi của chương trình Python, nhưng nó sẽ kém hiệu quả hơn. Nhưng đối với nhóm thử nghiệm, tìm lỗi hoặc cho các nhà nghiên cứu, tạo một thông dịch viên hoặc trình biên dịch - mô -đun này rất hữu ích.efficient. But for testing team, finding the bug or for researchers, creating an interpreter or compiler – this module is very useful.


Mô-’ Mục Đích Chính Cho Giao Diện Này Là Cho Phép MÃ Python Chỉnh Điều nào tốt Nó cũng nhanh hơn.

GHI Chú

Từ Python 2.5 trở Đi, NÓ THUậN TIệN HơN NHIềU Để CắT ở GIIA

Đó là một vào Đây Không phải là một hướng dẫn về ChỉNH

Quan trọng NHất, Một Sự Hiểu Để Biết Thông Tin Đầy Đủ Về Cú Phổi Ngôn ngữ, HÃY THAM KhảO THAM CHIếU Ngôn ngữ Python. Bản thn trình phân tích cú phápc Các C cùngi Các Đi

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0 muô Xin LưU Ý Tuy nhiên, việc vận chuyển mã từ phiên bản Python này sang phiên bản khác như văn bản nguồn sẽ luôn cho phép các cây phân tích chính xác được tạo trong phiên bản đích, với hạn chế duy nhất là chuyển sang phiên bản cũ của trình Thông dịch Sẽ Không Hỗ Trợ Các cấu Trúc Ngôn ngữ Gần Đây Hơn. Các C cùngi Bản thân trình phân tích cú pháp được tạo từ một đặc tả ngữ pháp được xác định trong tệp
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
6 trong phân phối Python tiêu chuẩn. Các cây phân tích được lưu trữ trong các đối tượng ST được tạo bởi mô -đun này là đầu ra thực tế từ trình phân tích cú pháp bên trong khi được tạo bởi các hàm
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7 hoặc
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8, được mô tả bên dưới. Các đối tượng ST được tạo bởi
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0 mô phỏng một cách trung thực các cấu trúc đó. Xin lưu ý rằng các giá trị của các chuỗi được coi là chính xác, sẽ thay đổi từ một phiên bản Python sang phiên bản khác vì ngữ pháp chính thức cho ngôn ngữ được sửa đổi. Tuy nhiên, việc vận chuyển mã từ phiên bản Python này sang phiên bản khác như văn bản nguồn sẽ luôn cho phép các cây phân tích chính xác được tạo trong phiên bản đích, với hạn chế duy nhất là chuyển sang phiên bản cũ của trình thông dịch sẽ không hỗ trợ các cấu trúc ngôn ngữ gần đây hơn. Các cây phân tích thường không tương thích từ phiên bản này sang phiên bản khác, mặc dù mã nguồn thường tương thích về phía trước trong một loạt phát hành chính.The Python Language Reference. The parser itself is created from a grammar specification defined in the file
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
6 in the standard Python distribution. The parse trees stored in the ST objects created by this module are the actual output from the internal parser when created by the
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7 or
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8 functions, described below. The ST objects created by
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0 faithfully simulate those structures. Be aware that the values of the sequences which are considered “correct” will vary from one version of Python to another as the formal grammar for the language is revised. However, transporting code from one Python version to another as source text will always allow correct parse trees to be created in the target version, with the only restriction being that migrating to an older version of the interpreter will not support more recent language constructs. The parse trees are not typically compatible from one version to another, though source code has usually been forward-compatible within a major release series.

Mỗi yếu tố của các chuỗi được trả về bởi

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
1 hoặc
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
2 có một hình thức đơn giản. Trình tự đại diện cho các phần tử không đầu cuối trong ngữ pháp luôn có chiều dài lớn hơn một. Yếu tố đầu tiên là một số nguyên xác định sản xuất trong ngữ pháp. Các số nguyên này được đặt tên biểu tượng trong tệp tiêu đề C
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
3 và mô -đun Python
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
4. Mỗi phần tử bổ sung của chuỗi đại diện cho một thành phần của sản xuất như được công nhận trong chuỗi đầu vào: Đây luôn là các chuỗi có cùng dạng với cha mẹ. Một khía cạnh quan trọng của cấu trúc này cần lưu ý là các từ khóa được sử dụng để xác định loại nút cha, chẳng hạn như từ khóa
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
5 trong
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
6, được đưa vào cây nút mà không có bất kỳ xử lý đặc biệt nào. Ví dụ: từ khóa
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
5 được biểu thị bằng Tuple
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8, trong đó
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
9 là giá trị số được liên kết với tất cả các mã thông báo
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
50, bao gồm các tên biến và chức năng được xác định bởi người dùng. Trong một biểu mẫu thay thế được trả về khi yêu cầu thông tin số dòng, cùng một mã thông báo có thể được biểu diễn dưới dạng
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
51, trong đó
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
52 đại diện cho số dòng tại đó biểu tượng thiết bị đầu cuối được tìm thấy.

Các phần tử đầu cuối được thể hiện theo nhiều cách tương tự, nhưng không có bất kỳ phần tử con nào và việc bổ sung văn bản nguồn được xác định. Ví dụ về từ khóa

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
5 ở trên là đại diện. Các loại ký hiệu thiết bị đầu cuối khác nhau được xác định trong tệp tiêu đề C
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
54 và mô -đun Python
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
55.

Các đối tượng ST không bắt buộc phải hỗ trợ chức năng của mô -đun này, nhưng được cung cấp cho ba mục đích: cho phép một ứng dụng khấu hao chi phí xử lý các cây phân tích phức tạp, để cung cấp biểu diễn cây phân tích để bảo tồn không gian bộ nhớ khi so sánh với Python Liệt kê hoặc đại diện tuple, và để dễ dàng tạo ra các mô -đun bổ sung trong C thao tác cây phân tích. Một lớp trình bao bọc đơn giản có thể được tạo ra trong Python để che giấu việc sử dụng các đối tượng ST.

Mô -đun

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
3 xác định các chức năng cho một vài mục đích riêng biệt. Mục đích quan trọng nhất là tạo các đối tượng ST và chuyển đổi các đối tượng ST sang các biểu diễn khác như cây phân tích và các đối tượng mã được biên dịch, nhưng cũng có các hàm phục vụ để truy vấn loại cây phân tích được biểu thị bởi một đối tượng ST.

Xem thêm

Mô -đun
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
4

Các hằng số hữu ích đại diện cho các nút bên trong của cây phân tích.

Mô -đun
>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
55

Các hằng số hữu ích đại diện cho các nút lá của cây phân tích và các chức năng để kiểm tra các giá trị nút.

Tạo đối tượng ST

Các đối tượng ST có thể được tạo từ mã nguồn hoặc từ cây phân tích. Khi tạo một đối tượng ST từ nguồn, các chức năng khác nhau được sử dụng để tạo các biểu mẫu

>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
59 và
>test_manager.py -abc
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
test_manager.py -ts test_suite: error: unrecognized arguments: -abc

>test_manager.py -h
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]

optional arguments:
  -h, --help            show this help message and exit
  -ts TEST_SUITE, --test_suite TEST_SUITE
                        Ban nho nhap ten test_suite
40. ________ 31 ________ 32 (Nguồn) ¶(source)¶(source)

Hàm

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7 phân tích nguồn tham số như thể nó là đầu vào cho

>test_manager.py -abc
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
test_manager.py -ts test_suite: error: unrecognized arguments: -abc

>test_manager.py -h
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]

optional arguments:
  -h, --help            show this help message and exit
  -ts TEST_SUITE, --test_suite TEST_SUITE
                        Ban nho nhap ten test_suite
44. Nếu phân tích cú pháp thành công, một đối tượng ST được tạo để giữ biểu diễn cây phân tích bên trong, nếu không một ngoại lệ thích hợp được nâng lên. ________ 31 ________ 36 (Nguồn)(source)¶(source)

Hàm

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8 phân tích nguồn tham số như thể nó là đầu vào cho

>test_manager.py -abc
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
test_manager.py -ts test_suite: error: unrecognized arguments: -abc

>test_manager.py -h
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]

optional arguments:
  -h, --help            show this help message and exit
  -ts TEST_SUITE, --test_suite TEST_SUITE
                        Ban nho nhap ten test_suite
48. Nếu phân tích cú pháp thành công, một đối tượng ST được tạo để giữ biểu diễn cây phân tích bên trong, nếu không một ngoại lệ thích hợp được nâng lên. ________ 31 ________ 40 (trình tự)(sequence)¶(sequence)

Hàm này chấp nhận một cây phân tích được biểu diễn dưới dạng một chuỗi và xây dựng một biểu diễn bên trong nếu có thể. Nếu nó có thể xác nhận rằng cây phù hợp với ngữ pháp Python và tất cả các nút là các loại nút hợp lệ trong phiên bản máy chủ của Python, một đối tượng ST được tạo từ biểu diễn bên trong và được trả lại cho cuộc gọi. Nếu có một vấn đề tạo ra biểu diễn nội bộ hoặc nếu cây không thể được xác thực, ngoại lệ

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
31 sẽ được nâng lên. Một đối tượng ST được tạo ra theo cách này không nên được giả định để biên dịch chính xác; Các trường hợp ngoại lệ bình thường được tăng lên bằng cách biên dịch vẫn có thể được bắt đầu khi đối tượng ST được truyền đến
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
32. Điều này có thể chỉ ra các vấn đề không liên quan đến cú pháp (chẳng hạn như ngoại lệ
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
33), nhưng cũng có thể là do các cấu trúc như kết quả của phân tích cú pháp
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
34, thoát khỏi trình phân tích cú pháp Python nhưng được kiểm tra bởi trình biên dịch byte.

Các chuỗi đại diện cho các mã thông báo đầu cuối có thể được biểu diễn dưới dạng danh sách hai phần tử của Mẫu

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
35 hoặc là danh sách ba phần tử của Mẫu
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
36. Nếu phần tử thứ ba có mặt, nó được coi là số dòng hợp lệ. Số dòng có thể được chỉ định cho bất kỳ tập hợp con của các ký hiệu đầu cuối trong cây đầu vào.

________ 31 ________ 48 (trình tự) ¶(sequence)¶(sequence)

Đây là chức năng tương tự như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0. Điểm vào này được duy trì để tương thích ngược.

Chuyển đổi đối tượng ST

Các đối tượng ST, bất kể đầu vào được sử dụng để tạo chúng, có thể được chuyển đổi thành các cây phân tích được biểu diễn dưới dạng danh sách hoặc các cây, hoặc có thể được biên dịch thành các đối tượng mã thực thi. Cây phân tích có thể được trích xuất có hoặc không có thông tin đánh số dòng.

________ 31 ________ 51 (ST, line_info = false, col_info = false) ¶(st, line_info=False, col_info=False)¶(st, line_info=False, col_info=False)

Hàm này chấp nhận một đối tượng ST từ người gọi trong ST và trả về danh sách Python đại diện cho cây phân tích tương đương. Biểu diễn danh sách kết quả có thể được sử dụng để kiểm tra hoặc tạo ra một cây phân tích mới ở dạng danh sách. Hàm này không thất bại miễn là bộ nhớ có sẵn để xây dựng biểu diễn danh sách. Nếu cây Parse sẽ chỉ được sử dụng để kiểm tra,

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
2 nên được sử dụng thay vào đó để giảm mức tiêu thụ và phân mảnh bộ nhớ. Khi yêu cầu biểu diễn danh sách, hàm này nhanh hơn đáng kể so với truy xuất biểu diễn tuple và chuyển đổi nó thành danh sách lồng nhau.

Nếu line_info là đúng, thông tin số dòng sẽ được bao gồm cho tất cả các mã thông báo thiết bị đầu cuối dưới dạng phần tử thứ ba của danh sách đại diện cho mã thông báo. Lưu ý rằng số dòng cung cấp chỉ định dòng mà mã thông báo kết thúc. Thông tin này bị bỏ qua nếu cờ là sai hoặc bỏ qua.

________ 31 ________ 54 (ST, line_info = false, col_info = false) ¶(st, line_info=False, col_info=False)¶(st, line_info=False, col_info=False)

Hàm này chấp nhận một đối tượng ST từ người gọi trong ST và trả về một tuple python đại diện cho cây phân tích tương đương. Khác với việc trả lại một tuple thay vì một danh sách, chức năng này giống hệt với

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
1.

Nếu line_info là đúng, thông tin số dòng sẽ được bao gồm cho tất cả các mã thông báo thiết bị đầu cuối dưới dạng phần tử thứ ba của danh sách đại diện cho mã thông báo. Thông tin này bị bỏ qua nếu cờ là sai hoặc bỏ qua.

________ 31 ________ 57 (st, filename = '')(st, filename='')¶(st, filename='')

Trình biên dịch Byte Python có thể được gọi trên một đối tượng ST để tạo các đối tượng mã có thể được sử dụng như một phần của các chức năng

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
48 hoặc
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
49 tích hợp. Hàm này cung cấp giao diện cho trình biên dịch, chuyển cây phân tích bên trong từ ST đến trình phân tích cú pháp, sử dụng tên tệp nguồn được chỉ định bởi tham số FileName. Giá trị mặc định được cung cấp cho tên tệp chỉ ra rằng nguồn là một đối tượng ST.

Biên dịch một đối tượng ST có thể dẫn đến các ngoại lệ liên quan đến biên dịch; Một ví dụ sẽ là một

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
30 do cây phân tích gây ra cho
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
34: Tuyên bố này được coi là hợp pháp trong ngữ pháp chính thức cho Python nhưng không phải là một cấu trúc ngôn ngữ pháp lý.
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
30 được nâng lên cho điều kiện này thực sự được tạo ra bởi trình biên dịch byte Python thông thường, đó là lý do tại sao nó có thể được nâng lên tại thời điểm này bởi mô-đun
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
3. Hầu hết các nguyên nhân gây ra lỗi biên dịch có thể được chẩn đoán theo chương trình bằng cách kiểm tra cây phân tích.

Truy vấn trên các đối tượng ST

Hai chức năng được cung cấp cho phép một ứng dụng xác định xem ST có được tạo dưới dạng biểu thức hay bộ. Cả hai chức năng này đều có thể được sử dụng để xác định xem ST có được tạo từ mã nguồn thông qua

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7 hoặc
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8 hay từ cây phân tích thông qua

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0. ________ 31 ________ 68 (ST)(st)¶ (st)

Khi ST đại diện cho biểu mẫu

>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
59, hàm này trả về
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
60, nếu không nó sẽ trả về
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
61. Điều này rất hữu ích, vì các đối tượng mã thường không thể được truy vấn cho thông tin này bằng các hàm tích hợp hiện có. Lưu ý rằng các đối tượng mã được tạo bởi
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
32 cũng không thể được truy vấn như thế này và giống hệt với các đối tượng được tạo bởi hàm
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
63 tích hợp. ________ 31 ________ 75 (ST)(st)¶(st)

Hàm này phản ánh

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
66 ở chỗ nó báo cáo liệu một đối tượng ST có đại diện cho một hình thức

>test_manager.py -abc
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]
test_manager.py -ts test_suite: error: unrecognized arguments: -abc

>test_manager.py -h
usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE]

optional arguments:
  -h, --help            show this help message and exit
  -ts TEST_SUITE, --test_suite TEST_SUITE
                        Ban nho nhap ten test_suite
40 hay không, thường được gọi là một bộ của bộ. Không an toàn khi cho rằng chức năng này tương đương với
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
68, vì các đoạn cú pháp bổ sung có thể được hỗ trợ trong tương lai.

Ngoại lệ và xử lý lỗi

Mô-đun phân tích cú pháp xác định một ngoại lệ duy nhất, nhưng cũng có thể vượt qua các trường hợp ngoại lệ tích hợp khác từ các phần khác của môi trường thời gian chạy Python. Xem từng chức năng để biết thông tin về các ngoại lệ mà nó có thể nêu ra.

Ngoại lệ ________ 31 ________ 80¶

Ngoại lệ được nâng lên khi xảy ra lỗi trong mô -đun phân tích cú pháp. Điều này thường được sản xuất cho các lỗi xác nhận thay vì

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
30 được nâng lên trong quá trình phân tích cú pháp bình thường. Đối số ngoại lệ là một chuỗi mô tả lý do của sự thất bại hoặc một tuple chứa một chuỗi gây ra sự thất bại từ cây phân tích được chuyển đến

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0 và một chuỗi giải thích. Các cuộc gọi đến
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0 Cần có khả năng xử lý một trong hai loại ngoại lệ, trong khi các cuộc gọi đến các chức năng khác trong mô -đun sẽ chỉ cần nhận thức được các giá trị chuỗi đơn giản.

Lưu ý rằng các chức năng

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
32,
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7 và
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8 có thể nêu ra các ngoại lệ thường được nêu ra bởi quá trình phân tích cú pháp và biên dịch. Chúng bao gồm các trường hợp ngoại lệ được xây dựng
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
33,
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
78,
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
30 và
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
80. Trong những trường hợp này, những ngoại lệ này mang tất cả các ý nghĩa thường được liên kết với chúng. Tham khảo các mô tả của từng chức năng để biết thông tin chi tiết.

Đối tượng ST

So sánh được đặt hàng và bình đẳng được hỗ trợ giữa các đối tượng ST. Pickling của các đối tượng ST (sử dụng mô -đun

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
81) cũng được hỗ trợ.

________ 31 ________ 93¶

Loại đối tượng được trả về bởi

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
7,
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
8 và

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
0.

Các đối tượng ST có các phương thức sau:

________ 97 ________ 98 (fileName = '')(filename='')¶(filename='')

Giống như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
89.

________ 97 ________ 68 ()()¶()

Giống như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
02. ________ 97 ________ 75 ()()¶()

Giống như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
02. ________ 97 ________ 75 ()()¶(line_info=False, col_info=False)

Giống như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
02. ________ 97 ________ 75 ()()¶(line_info=False, col_info=False)

Giống như

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
11.

>>> code = compile('a + 5', 'file.py', 'eval') >>> a = 5 >>> eval(code) 10 02. ________ 97 ________ 75 ()()¶

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
05. ________ 97 ________ 107 (line_info = false, col_info = false) ¶(line_info=False, col_info=False)¶

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10

>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
08. ________ 97 ________ 110 (line_info = false, col_info = false) ¶(line_info=False, col_info=False)¶

>test_manager.py -ts "SANITY_SUITE"
OK OK! Minh Se Chay Test Suite SANITY_SUITE Cho Ban

>test_manager.py -ts "REGRESSION_SUITE"
OK OK! Minh Se Chay Test Suite REGRESSION_SUITE Cho Ban
5

Ví dụ: Mô phỏng của ________ 73¶

Mặc dù nhiều hoạt động hữu ích có thể diễn ra giữa tạo phân tích cú pháp và mã byte, hoạt động đơn giản nhất là không làm gì cả. Đối với mục đích này, sử dụng mô -đun
>>> code = compile('a + 5', 'file.py', 'eval')
>>> a = 5
>>> eval(code)
10
3 để tạo cấu trúc dữ liệu trung gian tương đương với mã

Hoạt động tương đương bằng cách sử dụng mô -đun >>> code = compile('a + 5', 'file.py', 'eval') >>> a = 5 >>> eval(code) 10 3 có phần dài hơn và cho phép cây phân tích phân tích bên trong trung gian được giữ lại như một đối tượng ST:

Một ứng dụng cần cả đối tượng ST và mã có thể đóng gói mã này thành các chức năng có sẵn:code is taken from the preprocessor, broken into smaller pieces and analyzed so other software can understand it.

>test_manager.py -abc usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE] test_manager.py -ts test_suite: error: unrecognized arguments: -abc >test_manager.py -h usage: test_manager.py -ts test_suite [-h] [-ts TEST_SUITE] optional arguments: -h, --help show this help message and exit -ts TEST_SUITE, --test_suite TEST_SUITE Ban nho nhap ten test_suite 4

Phân tích phân tích cú pháp làm gì?the process of converting codes to machine language to analyze the correct syntax of the code. Python provides a library called a parser.

Trình phân tích cú pháp là một chương trình là một phần của trình biên dịch và phân tích cú pháp là một phần của quy trình biên dịch.Phân tích cú pháp xảy ra trong giai đoạn phân tích tổng hợp.Trong phân tích cú pháp, mã được lấy từ bộ tiền xử lý, chia thành các phần nhỏ hơn và được phân tích để phần mềm khác có thể hiểu nó.code is taken from the preprocessor, broken into smaller pieces and analyzed so other software can understand it.

Có nghĩa là gì bởi Parse trong Python?you write a grammar that defines the language, or document, and you run the tool to generate a parser usable from your Python code.

Phân tích cú pháp được định nghĩa là quá trình chuyển đổi mã thành ngôn ngữ máy để phân tích cú pháp chính xác của mã.Python cung cấp một thư viện gọi là trình phân tích cú pháp.the process of converting codes to machine language to analyze the correct syntax of the code. Python provides a library called a parser.

Làm thế nào để bạn viết trình phân tích cú pháp trong Python?C parser is the one used by Python, this means that if something goes wrong when adding some new rules to the grammar you cannot correctly compile and execute Python anymore.