Luồng xử lý các echo và điều khiển các rule

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 72 - 76)

i. Xóa bỏ tất cả các biến frontal, chuỗi wave liên quan tới track node này Xóa bỏ track node

3.6.2Luồng xử lý các echo và điều khiển các rule

Các echo sẽ lan truyền ngược lên gốc của hệ thống track và kết hợp với nhau tại các TN. Các echo sẽ được đồng bộ với nhau bằng cách track cha sẽ chờ các track con sau khi kết thúc gửi echo lên. Sau khi tất cả các echo đã được nhận đủ, track cha lại tiếp tục kích hoạt việc gửi echo tổng hợp lên trên. Quá trình trên sẽ tiếp tục cho đến khi gặp track có kèm theo rule hoặc echo được gửi tới gốc của hệ thống track. Sau khi xử lý xong chuỗi wave lan tỏa trong chế độ track, chương trình sẽ gửi thông điệp xóa track, để xóa toàn bộ dữ liệu lưu trữ trong track và giải phóng bộ nhớ phục vụ cho những đoạn mã wave tiếp theo.

Trong track có thể gắn thêm rule hoặc không. Nếu track có gắn thêm rule thì việc kết hợp các echo sẽ không giống với khác track thông thường mà chịu sự qui định khác nhau của mỗi rule. Thêm vào đó, đối với các rule tuần tự có thể kích hoạt các track bị treo sau khi nhận được echo từ track con. Các rule còn thay đổi hành động của track sau khi nhận được các echo từ track con. Trong trường hợp này, thay vì gửi echo lên trên, chuỗi wave tail bị treo trong track sẽ được gửi đến các track con nếu điều kiện của rule được thỏa mãn.

Hình 3-36: Lan truyền echo lên trên WT tail 2 1 3 7 4 5 6 Node đích

Hình 3-37: Gửi tail cho các track con

Các bước xử lý echo như trong ta thấy, ban đầu khi các track đã phát triển tới được node đích, quá trình echo sẽ được thực hiện từ các node đích ngược trở lên trên về track cha. Khi echo lên tới track có gán rule thì dựa vào echo tổng hợp được và rule thì wave tail sẽ được gửi trở lại các track lá.

Các bước xử lý echo được thể hiện trong luồng thứ 2 của Hình 3 -35: Luồng xử lý giữa các thành phần trong Wave Interpreter. Các echo sẽ bắt đầu lan tỏa từ các node đích khi chuỗi wave kết thúc hoặc bị hủy bỏ bởi các điều kiện không thỏa mãn trong phép so sánh hay khi xử lý lệnh echo dot halt. Echo được kích hoạt tại các track lá, sau đó lan truyền và đồng bộ trong hệ thống track. Luồng xử lý echo có thể chia làm 3 phần đó là: gửi các echo đi, xóa track và tổng hợp echo tại track chứa rule.

Gửi các echo

Đây là phần chính trong luồng xử lý echo, bắt đầu khi chuỗi wave kết thúc xử lý. Các echo có thể được nhận từ ngoài mạng hoặc từ trong cùng WI, khi nhận được echo các bước xử lý bắt đầu sau bước start_echo:

tail 2 1 3 7 4 5 6 Node đích

 activate_echo: echo được kích hoạt trong track và bắt đầu lan tỏa.

 propagate_echo: echo được gửi lên track cha. Nếu track cha nằm trên máy khác thì echo sẽ được gửi ra bên ngoài mạng.

 merge_echo: bước này do track cha xử lý khi nhận được echo, echo sẽ được tổng hợp lại với echo đang lưu trữ trong track. Nếu track cha nhận đủ echo từ các track con, quá trình này lại được tiếp tục đối với track cha.

Xóa track

Cũng gần giống với việc lan tỏa các echo trong quá trình xóa track cũng có một thông báo được gửi đi, nhưng thay vì chỉ gửi echo lên trên, công việc xóa track lại bắt đầu từ track cha.Thông điệp xóa track sẽ được gửi đi sau khi chuỗi wave thực hiện xong, hoặc chuỗi wave chuyển từ chế độ track sang chế độ thông thường. Các bước xóa track diễn ra như sau:

 activate_echo: quá trình xóa track được kích hoạt.

 delete_track: track được xóa và tất cả các dữ liệu lưu trữ trong track được giải phóng.

 propagate_echo: thông điệp xóa track được gửi xuống các track con

 merge_echo: nếu track con nằm trên cùng WI với track cha, quá trình xóa track được lặp lại. Nếu không cùng WI thì thông điệp xóa track sẽ được gửi ra ngoài mạng.

Tổng hợp echo tại Track có rule

Nếu rule được gán vào track thì quá trình xử lý echo sẽ thay đổi tùy thuộc vào ý nghĩa của từng rule khác nhau. Mỗi rule định nghĩa những điều kiện logic làm thay đổi việc tổng hợp các echo. Ví dụ như đối với luật AS nếu gặp ít nhất một echo mang giá trị FALSE thì giá trị của echo tại track là FALSE. Các rule tuần tự còn bao gồm các nhánh bị treo lại, và các nhánh sẽ lần lượt được kích hoạt sau khi nhận được echo và điều kiện của rule được thỏa mãn.

Thông thường đối với các rule, các wave tail bị treo lại sẽ được gửi đến tất cả các track con sau khi track nhận đủ echo và điều kiện của rule được thỏa mãn. Sau khi gửi tail đi thì rule cũng sẽ bị xóa khỏi track và tính chất của rule cũng sẽ mất đi.

Các rule trong track sẽ được kích hoạt mỗi khi nhận được echo từ một trong số các track con.

 activate_echo: echo được kích hoạt trong track. Trong trường hợp này track được kích hoạt là một trong số các track con của track có gắn rule.

 propagate_echo: echo được gửi lên track cha có gắn rule. Tại đây có 3 trường hợp có thể xảy ra.

− activate_branch: nếu track hiện tại được gán rule tuần tự (SQ, OS, AS) thì nhánh tiếp theo sẽ được kích hoạt và xử lý.

− delete_rule: nếu điều kiện của rule được thỏa mãn, rule được xóa khỏi track và wave tail được gửi đến các track con.

Quá trình gửi tail thông qua hệ thống track là luồng xử lý cuối cùng của WI. Quá trình này được kích hoạt bởi các rule hoặc có thông điệp tail đến từ mạng. Trên mỗi track nhận được tail, tail sẽ tiếp tục được được gửi đến các track con của nó cho đến khi track hiện tại là các track lá hoặc track được gửi nằm bên ngoài hệ thống.

Các bước xử lý tail diễn ra như sau:

 forward_tail: tail được nhân ra và gửi đến tất cả các track con, lặp lại cho đến khi tới được các track cuối cùng.

 delete_track: bước này chỉ sử dụng khi track gửi tail đi không có track cha và chuỗi wave sau quá trình này sẽ chuyển sang trạng thái lan tỏa không có track. Tại bước này track sẽ bị xóa đi sau khi gửi tail đến các track con và giải phóng toàn bộ vùng nhớ mà track chiếm dụng.

 resume_tail: Khi các track cuối cùng nhận được tail. Tại các track này wave tail cùng với các biến frontal, environment được lưu trữ kết hợp tạo thành wave và tiếp tục quá trình xử lý. (adsbygoogle = window.adsbygoogle || []).push({});

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 72 - 76)