NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN

61 4.8K 62
NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN GIỚI THIỆU  Sự ra đời và lịch sử phát triển của công nghệ thông tin luôn gắn liền với khái niệm về lập trình và ngôn ngữ lập trình. Các ngôn ngữ lập trình phát triển theo thời gian từ các ngôn ngữ thô sơ cấp thấp như ngôn ngữ máy, assembly cho tới các ngôn ngữ cấp cao hiện nay như .NET, Java, Python… Các ngôn ngữ lập trình là những công cụ giúp lập trình viên thực hiện những công việc theo ý muốn bằng cách ra lệnh cho máy tính thực hiện. Để người lập trình hiểu rõ hơn và nhờ đó nâng cao khả năng làm việc và giảng dạy, chúng ta cần phải tìm hiểu các nguyên lý cơ bản của ngôn ngữ lập trình, từ đó có thể dễ dạng tiếp cận một ngôn ngữ mới và biết được các điểm mạnh yếu của nó khi sử dụng cho các ứng dụng thực tế. Được sự giảng dạy và hướng dẫn của thầy TS. Nguyễn Tuấn Đăng trong môn “Nguyên Lý và Phương Pháp Lập Trình”, em đã có thể hiểu rõ được các khái niệm cơ bản này. Từ đó em đã thử tìm hiểu về một ngôn ngữ mới mà hiện tại google đang sử dụng làm một trong các ngôn ngữ để phát triển ứng dụng trên nền cloud computing. Đó là ngôn ngữ python trong đề tài “NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN”. Em rất chân thành cám ơn thầy, TS. Nguyễn Tuấn Đăng đã định hướng và hướng dẫn em trong suốt môn học và đặc biệt là nhận xét để giới hạn lại nội dung của đề tài này. TP. HCM, Ngày 22 tháng 02 năm 2012 Đỗ Văn Cang 2 GIỚI THIỆU 2 1. NGÔN NGỮ LẬP TRÌNH 5 1.1. Định nghĩa 5 1.2. Trình biên dịch và thông dịch 6 1.3. Phân tích cú pháp của chương trình 8 (1.3.1. Phân tích từ vựng 8 (1.3.2. Phân tích cú pháp 9 (1.3.3. Phân tích ngữ nghĩa 10 1.4. Cấu trúc chung của một ngôn ngữ lập trình 11 1.5. Ngôn ngữ scripting 13 (1.5.1. Khái niệm ngôn ngữ script 13 (1.5.2. Ưu và khuyết điểm 14 2. NGÔN NGỮ PYTHON 15 2.1. Các đặc điểm tiêu biểu của Python 15 (2.1.1. Giá trị và kiểu 15 (2.1.2. Biến, sự lưu trữ và điều khiển 16 (2.1.3. Liên kết và tầm vực 17 (2.1.4. Thủ tục trừu tượng 18 (2.1.5. Dữ liệu trừu tượng 18 (2.1.6. Trình biên dịch độc lập 18 (2.1.7. Thư viện module 19 2.2. Các kiểu dữ liệu cơ bản 19 (2.2.1. Biến số (numerics) 19 (2.2.2. Biến chuỗi (Strings) 20 (2.2.3. Chuỗi Unicode 21 (2.2.4. Lists (Danh sách) 21 2.3. Các cấu trúc điều khiển 22 (2.3.1. Lệnh if 22 (2.3.2. Lệnh for 22 (2.3.3. Hàm range() 23 (2.3.4. Lệnh break, continue và else trong vòng lặp 23 (2.3.5. Lệnh pass 24 (2.3.6. Định nghĩa hàm 24 2.4. Cấu trúc dữ liệu 27 (2.4.1. Lists ( danh sách) 27 (2.4.2. Lệnh del 29 (2.4.3. Tuples và Sequences 29 (2.4.4. Sets (tập hợp) 30 (2.4.5. Dictionaries (bảng tra) 30 (2.4.6. Các kỹ thuật lặp 31 (2.4.7. Tìm hiểu thêm về điều kiện 32 (2.4.8. So sánh danh sách 32 2.5. Modules 33 (2.5.1. Thực thi module như script 34 (2.5.2. Truy xuất và biên dịch modules 34 (2.5.3. Packages 35 2.6. Lớp 35 (2.6.1. Định nghĩa lớp 35 (2.6.2. Một số nhận xét 37 3 (2.6.3. Kế thừa 38 (2.6.4. Biến private 40 (2.6.5. Cấu trúc trong python 40 (2.6.6. Lớp Exception 41 (2.6.7. Lớp duyệt ( Iterators) 41 (2.6.8. Generators 42 (2.6.9. Generator Expressions 43 2.7. Giới thiệu sơ về một số thư viện chuẩn 43 (2.7.1. Giao tiếp với hệ thống 43 (2.7.2. Ký tự thay thế tập tin 44 (2.7.3. Thông số dòng lệnh 44 (2.7.4. Khớp chuỗi mẫu 44 (2.7.5. Toán học 45 (2.7.6. Tuy cập internet 45 (2.7.7. Ngày và giờ 45 (2.7.8. Nén dữ liệu 46 (2.7.9. Đo hiệu suất 46 (2.7.10. Điều khiển chất lượng 47 (2.7.11. Đa luồng - Multi-threading 47 (2.7.12. Tham chiếu yếu - Weak References 48 (2.7.13. Làm việc với bản ghi dữ liệu nhị phân 49 3. ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN 50 3.1. Phân tích các phép tính cơ bản 50 3.2. Phân tích cú pháp có chọn lọc : ví dụ phân tích file cấu hình DNS 53 3.3. Phân tích và thu thập các địa chỉ trên một trang web 55 3.4. Phân tích câu lệnh SELECT SQL 57 4. KẾT LUẬN 61 Tài liệu tham khảo 61 4 1. NGÔN NGỮ LẬP TRÌNH 1.1. Định nghĩa Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu được. Theo định nghĩa ở trên thì một ngôn ngữ lập trình phải thỏa mãn được hai điều kiện cơ bản là: - Nó phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể dùng nó giải quyết các bài toán khác. - Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (process), để có thể chạy được trên các máy tính khác. Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện các thao tác máy tính nào đó thông qua một chương trình. Các tên khác của khái niệm này nếu không bị lầm lẫn là chương trình máy tính hay chương trình điện toán. Chữ lập trình dùng để chỉ thao tác của con người nhằm kiến tạo nên các chương trình máy tính thông qua các ngôn ngữ lập trình. Người ta còn gọi quá trình lập trình đó là quá trình mã hoá thông tin tự nhiên thành ngôn ngữ máy. Trong các trường hợp xác định thì chữ lập trình còn được viết là "viết mã" (cho chương trình máy tính). Như vậy, theo định nghĩa, mỗi ngôn ngữ lập trình cũng chính là một chương trình, nhưng có thể được dùng để tạo nên các chương trình khác. Một chương trình máy tính được viết bằng một ngôn ngữ lập trình thì những chỉ thị (của riêng ngôn ngữ ấy) góp phần tạo nên chương trình được gọi là mã nguồn của chương trình ấy. Thao tác chuyển dạng từ mã nguồn sang thành chuỗi các chỉ thị máy tính được thực hiện hoàn toàn tương tự như là việc chuyển dịch giữa các ngôn ngữ tự nhiên của con người. Các thao tác này gọi là biên dịch (hay ngắn gọn hơn là dịch). Người ta còn phân việc biên dịch làm hai loại tùy theo quá trình dịch xảy ra trước quá trình thực thi các tính toán hay nó xảy ra cùng lúc với quá trình tính toán: - Một phần mềm thông dịch là một phần mềm có khả năng đọc, chuyển dịch mã nguồn của một ngôn ngữ và ra lệnh cho máy tính tiến hành các tính toán dựa theo cú pháp của ngôn ngữ. - Một phần mềm biên dịch hay ngắn gọn hơn trình dịch là phần mềm có khả năng chuyển dịch mã nguồn của một ngôn ngữ ban đầu sang dạng mã mới thuộc về ngôn ngữ cấp thấp hơn. Ngôn ngữ cấp thấp nhất là một chuỗi các chỉ thị máy tính mà có thể được thực hiện trực tiếp bởi chính máy tính (thông qua các theo tác trên vùng nhớ). Trước đây, hầu hết các trình dịch cũ thường phải thông dịch từ mã nguồn sang bộ mã phụ (các tệp có dang *.obj), rồi sau đó, mới biên dịch tiếp sang các tập tin thi hành. Ngày nay, hầu hết các trình dịch đều có khả năng viên dịch mã nguồn trực 5 tiếp sang thành các tập tin thi hành hay biên dịch sang các dạng mã khác thấp hơn tuỳ theo yêu cầu của người lập trình. Điểm khác nhau giữa thông dịch và biên dịch là: Trình thông dịch sẽ dịch từng câu lệnh một và chương trình đích sẽ không được lưu lại. Còn trình biên dịch sẽ dịch toàn bộ chương trình, cho ra chương trình đích được lưu lại trong máy tính rồi mới thực hiện chương trình. Một chương trình máy tính có thể được thực thi bằng cách tổ hợp của việc biên dịch và thông dịch. 1.2. Trình biên dịch và thông dịch Chúng ta hãy tìm hiểu một số khái niệm về việc thực thi các chương trình được viết bằng ngôn ngữ cấp cao. Như chúng ta đã thấy, ngôn ngữ mà máy tính có thể hiểu được gọi là ngôn ngữ máy. Những ngôn ngữ này chứa tập các toán tử cơ bản được thực thi và cài đặt bên trong phần cứng của bộ xử lý. Chúng ta cũng đã nhìn thấy ngôn ngữ lập trình cấp cao cung cấp một mức độ trừ tượng độc lập với máy cao hơn ngôn ngữ máy, vì vậy nó thích nghi hơn với tương tác giữa người và máy. Nhưng điều này cũng chắc rằng có một sự truyển đổi ngầm định giữa ngôn ngữ lập trình cấp cao và ngôn ngữ máy. Có hai kiểu chuyển đổi: Trình thông dịch: Là một chương trình cài đặt hoặc giả lặp máy ảo sử dụng tập lệnh cơ bản của ngôn ngữ lập trình như là ngôn ngữ máy của nó. Có thể hình dung, một trình thông dịch như một chương trình cài đặt thư viện có chứa việc thực hiện các lệnh cơ bản của ngôn ngữ lập trình sang ngôn ngữ máy. Một trình thông dịch đọc những câu lệnh, phân tích và thực hiện chúng trên máy ảo bằng cách gọi các lệnh tương ứng của thư viện. Trình biên dịch: Là một chương trình chuyển đổi mã của ngôn ngư lập trình sang mã máy, cũng được gọi là mã đối tượng. Mã đối tượng có thể được thực hiện trực tiếp trên máy mà nó biên dịch. Hình bên dưới so sánh cách sử dụng của trình thông dịch và biên dịch 6 Hình 1.1. so sánh trình thông dịch và trình biên dịch Vì vậy trình biên dịch phân định rõ ràng giữa việc chuyển đổi và việc thực thi một chương trình, nó ngược lại với trình thông dịch là chỉ chuyển đổi một lần duy nhất. Mã đối tượng phụ thuộc vào máy có nghĩa là chương trình chỉ có thể chạy trên máy mà nó biên dịch, trong khi đó chương trình thông dịch thì không phụ thuộc vào máy việc phụ thuộc vào máy là do bản thân trình thông dịch. Hình dưới minh họa một khái niệm khác của việc thực thi chương trình kết hợp điểm mạnh của trình thông dịch và trình biên dịch với nhau. Ví dụ, khái niệm này được sử dụng bởi ngôn ngữ lập trình Java và rõ ràng hơn là Python. Hình 1.2. Việc thực thi byte code đã được biên dịch Trong trường hợp này, mã nguồn được chuyển đổi bởi một trình biên dịch sang một dạng mã đối tượng, còn được gọi là byte code sau đó được thực thi bởi một trình thông dịch chạy một máy ảo bằng cách sử dụng byte code này. Việc thực 7 thi các byte code nhanh hơn so với thông dịch mã nguồn, vì phần lớn của các phân tích và xác minh của các mã nguồn được thực hiện trong bước biên dịch. Tuy nhiên, byte code vẫn độc lập với máy vì phần phụ thuộc vào máy nằm bên trong máy ảo. 1.3. Phân tích cú pháp của chương trình Mỗi ngôn ngữ lập trình khác nhau sẽ có những nguyên tắc về cú pháp khác nhau. Tuy nhiên, dù bằng ngôn ngữ nào đi nữa thì cũng cần phải có một chương trình làm nhiệm vụ dịch ngôn ngữ này ra ngôn ngữ máy. Chương trình này gọi chung là chương trình dịch (biên dịch hoặc thông dịch). Như vậy việc thực hiện dịch này xảy ra như thế nào ? Quá trình này có thể được phát thảo sơ lượt như sau: Chúng ta sẽ phân tích về 3 bước chính quá trình trên gồm: phân tích từ vựng, cú pháp và ngữ nghĩa. Riêng phần phát sinh mã trung gian ( vd như IL trong .NET ) , mã đích và tối ưu không đề cập trong phần này. (1.3.1. Phân tích từ vựng Các công việc mà trình dịch thực hiện phân tích từ vựng: - Đọc luồng kí tự của chương trình nguồn. - Nhóm các kí tự thành các câu (vị từ, mệnh đề) có nghĩa. - Với mỗi câu bộ phân tích từ vựng: 8 o Tạo token tương ứng và gửi cho bộ phận phân tích cú pháp  Token là một chuỗi gồm một hay nhiều kí tự  Token là nguyên tố : không thể phân tách nhỏ hơn.  Ví dụ : định danh (count), từ khóa (if), toán tử (==), hằng số (123.4), vv… o Lưu thông tin vào bảng định danh - Loại trừ các khoảng trắng ( tab,blank,comment,….). - Kiểm tra lỗi từ vựng. Ví dụ lệnh gán sau đây: totalminutes= minute + hour*60 Sẽ được tách thành các token sau đây - định danh “totalminutes” - kí hiệu gán “=” - định danh “minute” - toán tử “+” - định danh “hour” - toán tử “*” - hằng số “60” Bảng định danh 1 totalminutes 2 minute 3 hour … (1.3.2. Phân tích cú pháp Giai đoạn phân tích cú pháp thực hiện công việc nhóm các token của chương trình nguồn thành văn phạm của ngôn ngữ lập trình mà sau đó sẽ được trình dịch tổng hợp ra thành sản phẩm. Văn phạm ngôn ngữ lập trình <exp> ::= <exp> +<exp> | <exp> *<exp> | ( <exp> ) | a | b | c Một biểu thức có thể là tổng của của 2 biểu thức, hoặc tích của 2 biểu thức, hoặc một biểu thức trong cặp ngoặc đơn… Hoặc có thể là một trong các biến a,b hay c. Để xác định cú pháp của một ngôn ngữ, người ta dung văn phạm phi ngữ cảnh CFG( Context Free Grammar) hay còn gọi là văn phạm BNF (Brackers Naur Form). Gọi văn phạm phi ngữ cảnh với G = (S,N,T,P), với: - N : tập các kí hiệu không kết thúc. - S : Ký hiệu bắt đầu của văn phạm, là N nhưng sử dụng làm gốc của cây. 9 - T : tập các kí hiệu kết thúc. - P : tập các luật sinh có dạng A  B với A thuộc N và B thuộc N hoặc T. Ví dụ: 1. <assign>  id = <expr> 2. <expr>  <expr> + <term> | <term> 3. <term>  <term> * <fact> | <fact> 4. <fact>  id | num (1.3.3. Phân tích ngữ nghĩa Sử dụng cây cú pháp trừu tượng và bảng định danh để kiểm tra “ngữ nghĩa”. - Biến sử dụng đã được khao báo hay chưa ? Tập hợp các thông tin, lưu trữ lên cây cú pháp và/hoặc bảng định danh. Tiến hành kiểm tra kiểu (type checking): - Toán tử có phù hợp với toán hạng. - Chỉ số mảng phải là kiểu số nguyên ? - Kiểu của toán hạng bên trái và bên phải có cùng kiểu ? - … Thực hiện chuyển kiểu (coercion) 10 [...]...1.4 Cấu trúc chung của một ngôn ngữ lập trình Dưới đây là liệt kê một số khái niệm bên trong một ngôn ngữ lập trình nhằm mục đích tìm hiểu chúng trong ngôn ngữ cụ thể python ở phần sau:  Giá trị và kiểu  Kiểu nguyên thủy  Kiểu cấu trúc và kiểu đệ quy  Kiểu hệ thống  Biểu thức  Biến, sự lưu trữ và và điều khiển  Biến đơn  Biến cấu trúc  Sao chép và tham chiếu  Chu kì tồn tại  Local... đã trở thành một ngôn ngữ lý tưởng cho script và phát triển ứng dụng nhanh chóng trong nhiều lĩnh vực trên hầu hết các flatforms Trình thông dịch Python có thể dễ dàng mở rộng với các chức năng và kiểu dự liệu mới được cài đặt trong C hoặc C++ ( hoặc các ngôn ngữ gọi từ C) Python cũng thích hợp như một ngôn ngữ mở rộng cho các ứng dụng tùy biến Python có thể được chạy ở chế độ thông dịch và chế độ thông... Ngôn ngữ lập trình script là một ngôn ngữ lập trình cấp cao được thông dịch bởi một chương trình khác ( trình thông dịch) lúc thực thi hơn là lúc biên dịch bởi bộ xử lý của máy tính như những ngôn ngữ lập trình khác( như C và C++) Trong hầu hết các trường hợp, việc viết mã trong một ngôn ngữ script thì dễ dàng hơn là viết mã của ngôn ngữ biên dịch Tuy nhiên, ngôn ngữ script chậm hơn bởi vì các lệnh cơ... tác đơn giản, nhưng phân tích cú pháp của văn bản (tức là khám phá cấu trúc bên trong của nó) thì khá rắc rối (1.5.2 Ưu và khuyết điểm Ưu điểm: Dễ học và sử dụng Yêu cầu kiến thức và kinh nghiệm về lập trình ít nhất Cho phép các công việc phức tạp được thực hiện chỉ với một vài bước Cho phép tạo và chỉnh sửa nhiều kiểu biên soạn dữ liệu văn bản Cho phép bổ sung động và tương tác các hành động vào trang... tác sử dụng IDLE (Python GUI) 2.1 Các đặc điểm tiêu biểu của Python Python là một ngôn ngữ scripting, với cơ chế dịch hyrid pha trộn giữa biên dịch và thông dịch đã được đề cập trong phần đầu Sử dụng comment với kí tự # trên một dòng Sử dụng các khoảng trắng hay thụt vô ( thụt ra ) để phân biệt tầm vực code (scope) Dưới đây là các đặc điểm về khái niệm của python khác biệt so với các ngôn ngữ lập trình. .. Chỉnh sửa và chạy code nhanh chóng Khuyết điểm: Tốc độ thực thi chậm hơn so với các ngôn ngữ biên dịch Độ bảo mật mà nguồn thấp (nhất là trong trường hợp sử dụng như các ngôn ngữ javascript, vbscript trên web) 14 2 NGÔN NGỮ PYTHON Python được thiết kế vào đầu những năm 1990 bởi Guido van Rossum.Nó đã được sử dụng cài đặt trang web tìm kiếm GOOGLE thành công, và trong một loạt các lĩnh vực ứng dụng khác... cấp như so khớp chuỗi (không giống như các ngôn ngữ kịch bản cũ hơn như PERL, mà các tính năng này được tích hợp bện trong – buildin) Python có kiểu tự động, do đó các script chứa rất ít hoặc không có thông tin về kiểu dữ liệu Python là ngôn ngữ lập trình mạnh mẽ và rất dễ học Nó có cấu trúc dữ liệu rất đơn giản nhưng hiệu quả để lập trình hướng đối tượng Cú pháp tao nhã , kiểu dữ liệu động, cùng với... nhau, từ khoa học viễn tưởng (hiệu ứng hình ảnh cho chuỗi the Star Wars) đối với khoa học thực tế (máy tính hỗ trợ thiết kế trong NASA) Python vay mượn ý tưởng từ các ngôn ngữ như như PERL, Haskell, và các ngôn ngữ hướng đối tượng, khéo léo tích hợp những ý tưởng này thành một bộ mạch lạc Script Python ngắn gọn nhưng có thể đọc được, và rất biểu cảm Python một ngôn ngữ nhỏ gọn, dựa trên thư viện của... Thủ tục trừu tượng  Thủ tục hàm và thủ tục  Tham số và đối số  Cơ chế sao chép tham số • vào • ra • vào và ra  Cơ thế tham chiếu  Dữ liệu trừu tượng  Program units, packages, and encapsulation  Unit : một thành phần độc lập trong chương trình  packages  encapsulation  Kiểu trừu tượng  Đối tượng và lớp  Lớp  Lớp con và kế thừa  Lớp trừu tượng  Đơn kế thừa và đa kế thừa  Giao diện – interface...  Đơn vị xử lý tổng quát  Tham số lớp và kiểu 12  Kiểu hệ thống  Luồng điều khiển  Điều khiển tuần tự  Lệnh nhảy  Lệnh thoát  Ngoại lệ ( exception)  Xử lý truy xuất đồng thời  Các vấn đề với xử lý đồng thời  Tương tác các tiến trình  Các xử lý đồng thời chính  Điều khiển xử lý đồng thời trừu tượng 1.5 Ngôn ngữ scripting (1.5.1 Khái niệm ngôn ngữ script Ngôn ngữ lập trình script là một ngôn

Ngày đăng: 11/04/2015, 15:03

Từ khóa liên quan

Mục lục

  • GIỚI THIỆU

  • 1. NGÔN NGỮ LẬP TRÌNH

    • 1.1. Định nghĩa

    • 1.2. Trình biên dịch và thông dịch

    • 1.3. Phân tích cú pháp của chương trình

      • (1.3.1. Phân tích từ vựng

      • (1.3.2. Phân tích cú pháp

      • (1.3.3. Phân tích ngữ nghĩa

      • 1.4. Cấu trúc chung của một ngôn ngữ lập trình

      • 1.5. Ngôn ngữ scripting

        • (1.5.1. Khái niệm ngôn ngữ script

        • (1.5.2. Ưu và khuyết điểm

        • 2. NGÔN NGỮ PYTHON

          • 2.1. Các đặc điểm tiêu biểu của Python

            • (2.1.1. Giá trị và kiểu

            • (2.1.2. Biến, sự lưu trữ và điều khiển

            • (2.1.3. Liên kết và tầm vực

            • (2.1.4. Thủ tục trừu tượng

            • (2.1.5. Dữ liệu trừu tượng

            • (2.1.6. Trình biên dịch độc lập

            • (2.1.7. Thư viện module

            • 2.2. Các kiểu dữ liệu cơ bản

              • (2.2.1. Biến số (numerics)

              • (2.2.2. Biến chuỗi (Strings)

              • (2.2.3. Chuỗi Unicode

              • (2.2.4. Lists (Danh sách)

Tài liệu cùng người dùng

Tài liệu liên quan