<< Chapter < Page Chapter >> Page >

Ký hiệu ordinary prefix sử dụng các dấu ngoặc để bao quanh các toán hạng và dấu phẩy để phân biệt các toán hạng. Ví dụ cấu trúc cây trong hình trên sẽ trở thành:

/(+M(B),SQRT(-(^(B,),*(*(4,A),C)))),*(2,A))

Một biến thể của ký hiệu này được dùng trong ngôn ngữ LISP đôi khi được gọi là Cambridge Polish. Theo ký hiệu Cambridge Polish thì các dấu ngoặc bên trái đứng sau một toán tử được chuyển ra trước toán tử đó và dấu phẩy ngăn cách các toán hạng bị xóa đi. Cấu trúc cây trên trở thành: (/(+(M B)(SQRT(-(^ B 2)(*(* 4 A)C)))) (* 2 A))

Biến thể thứ hai được gọi là ký hiệu Polish, cho phép bỏ hẳn các dấu ngoặc. Nếu chúng ta giả sử rằng số lượng các toán hạng của mỗi một phép toán là đã biết và cố định thì các dấu ngoặc là không cần thiết. Cấu trúc cây trên sẽ trở thành: / + M B SQRT - ^ B 2 * * 4 A C * 2 A

Bởi vì nhà toán học Ba lan Lukasiewiez đã phát minh ra ký hiệu không dấu ngoặc này nên thuật ngữ "Polish" được dùng cho ký hiệu này và các biến thể của nó.

Thực tế hiển nhiên là các biểu thức kiểu này rất khó giải. Trong thực tế, chúng ta không thể giải biểu thức dạng Polish. Các dạng ordinary prefix và Cambridge Polish đòi hỏi quá nhiều dấu ngoặc và dĩ nhiên là các ký hiệu này không gần gũi với những ký hiệu đã trở thành thói quen của chúng ta. Tuy nhiên ký hiệu ordinary prefix là một ký hiệu toán học chuẩn cho hầu hết các phép toán khác các phép toán số học và logic, chẳng hạn f(x,y,z) được viết theo ký hiệu prefix. Ðiều quan trọng hơn là ký hiệu prefix được dùng để biểu diễn một phép toán với số lượng toán hạng bất kỳ và do đó nói chung chỉ cần học một quy tắc để viết các biểu thức bất kỳ.

Ký hiệu hậu tố (postfix)

Ký hiệu postfix tương tự như ký hiệu Prefix ngoại trừ ký hiệu phép toán đứng sau danh sách các toán hạng. Ví dụ ((A,B)+,(C,A)-)* Hoặc A B + C A - *

Postfix không phải là sự biểu diễn phổ biến cho biểu thức trong ngôn ngữ lập trình nhưng nó có tầm quan trọng như là cơ sở của sự biểu diễn tại thời gian thực hiện của biểu thức.

Kí hiệu trung tố (infix)

Ký hiệu trung tố thích hợp với phép toán hai ngôi tức là phép toán có hai toán hạng. Trong ký hiệu trung tố, ký hiệu phép toán được viết giữa hai toán hạng. Vì ký hiệu trung tố dùng cho các phép tính số học cơ bản, phép toán quan hệ và các phép toán logic trong toán hoc thông thường nên nó cũng được chọn để dùng một cách rộng rãi trong ngôn ngữ lập trình cho các phép toán đó và trong một số trường hợp còn được mở rộng cho các phép toán khác. Mặc dù ký hiệu trung tố được dùng một cách phổ biến, nhưng việc dùng nó trong ngôn ngữ lập trình cũng gây ra một số vấn đề nhất định:

1/ Vì ký hiệu trung tố chỉ thích hợp đối với phép toán hai ngôi nên một ngôn ngữ không chỉ dùng ký hiệu trung tố mà còn kết hợp với ký hiệu Prexfix hoặc Postfix. Ðiều này làm cho việc dịch trở nên phức tạp hơn.

2/ Khi có nhiều hơn một toán tử trung tố xuất hiện trong một biểu thức thì có thể xẩy ra tình trạng mập mờ, nghĩa là một biểu thức có thể biểu diễn bằng nhiều cây biểu thức. Ví dụ biểu thức trung tố: A * B + C có thể được biểu diễn thành hai cây như sau:

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Ngôn ngữ lập trình. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10783/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Ngôn ngữ lập trình' conversation and receive update notifications?

Ask