Chi tiết ví dụ về các bước của Wave

Một phần của tài liệu xây dựng bộ phân tích cú pháp chương trình (Trang 27 - 29)

Chú ý: Simple move: là 1 Head mà Head này không thể tách được thành Head đơn giản hơn (không có dấu phảy trong Simple move).

Để hiểu rõ hơn về các thực hiện của Wave không đi kèm với Rule , ta xét một ví dụ đơn giản khi thực hiện ở Node b hiện tại:

F = 3. r # a, (s # ANY. T # z ), STAY. N+F. TERMINAL = CONTENT.

Hay viết ngắn gọn: F = 3. r # a, (s # ANY. T # z ),. N+F.T = C.

Ở các bước thực hiện khác nhau trong ví dụ trên, nếu Head của Wave không phải là Simple move thì các Head này sẽ được tách ra thành các Simple move (các Simple move cách nhau bởi các dấu phảy). Sau khi Head được xử lý thành các thành phần nhỏ hơn (cách nhau bởi dấu phẩy), Tail của Wave sẽ được gửi tới Node tương ứng trong trường hợp thành phần đó là Simple move hoặc Tail được sao chép và gắn với Wave mà Head của Wave này là kết quả của một thành phần được chia ở Head trong Wave trước. Do đó Wave mới luôn được xử lý độc lập.

Trong trường hợp rất nhiều Wave được xử lý cùng một lúc, chúng sẽ được cho vào trong WaveQueue để chờ xử lý.

Ta phân tích lần lượt các bước thực hiện ở ví dụ trên 1. Bước 1

Head của Wave là: F=3

Và Tail

r # a, (s # ANY. T # z ), N+F. TERMINAL = CONTENT

Biến Frontal F đã được tạo gắn với Wave Tail cho vào cùng hàng đợi 3. Bước 3

Head của Wave là: r # a, (s # ANY. T # z ), STAY

Và Tail

N+F.TERMINAL = CONTENT

Với việc tách biến Frontal đi rồi, Head của Wave mới không thể thực thi 1 cách trực tiếp mà là sự kết hợp lại từ 3 nhánh (mà mỗi nhánh cách nhau bởi 1 dấu phẩy). Do đó chuỗi Wave ban đầu sẽ được tách thành 3 Wave con là

 Wave 1: r # a. N+F.TERMINAL = CONTENT

 Wave 2: s # ANY. T # z. N+F.TERMINAL = CONTENT

 Wave 3: N+F.TERMINAL = CONTENT

Sau đó, biến Frontal F sẽ được ghép và xuất hiện ở 3 chuỗi Wave con, chúng sẽ được để vào trong hàng đợi Wave Queue

4. Bước 4

Wave Queue làm việc theo cơ chế: Chuỗi Wave nào vào trước thì được thực hiện trước. Do đó Wave1 sẽ được thực hiện trước Wave2 và Wave 3, được tách có Head là

r# a

và Tail: N+F.TERMINAL = CONTENT

với biến Frontal đang được tách ra. Nhìn vào Head của Wave sau khi được tách ta thấy Head lúc này đã là 1 simple move và có thể được thực thi 1 cách trực tiếp (mà không qua vòng lặp tách Head cho tới khi là

simple move). Hop thực thi từ Node hiện tại b qua Link r tới Node a

(Node a được chứa trên máy tính khác). Tail cùng với biến Frontal F được gửi tới Node a và cho vào hàng đợi Wave Queue của máy tính đang chứa Node a này. Ở Node b tiếp tục thực thi chuỗi Wave 2

5. Bước 5

Head của Wave 2 là

s # ANY

và Tail

t # z . N+F.TERMINAL = CONTENT (adsbygoogle = window.adsbygoogle || []).push({});

biến Frontal được tách ra. Hop trong Head sẽ được thực thi và gửi tới tất cả các Node liền kề qua Link s (trong lúc gửi, Tail cũng được gửi cùng). Tất cả các Wave mới đều được kích hoạt trong hàng đợi ở máy tính chứa Node của Wave đó. Wave Queue chỉ lưu lại các simple move.

N+F.TERMINAL = CONTENT

ở đây biến N=7 (cho trước) và F = 3CONTENTb,lúc này ta có

TERMINAL là: b

Một phần của tài liệu xây dựng bộ phân tích cú pháp chương trình (Trang 27 - 29)