Thuật toán tổng quát cho Wave không 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 29 - 30)

Như trong ví dự ở trên, công việc của trình biên dịch Wave trong mỗi máy có thể được miêu tả bằng thuật toán tổng quát.

Vòng lặp:

1. Lấy Wave từ Wave Queue và tách biến môi trường ra. 2. Bỏ tất các dấu ngoặc đơn ở toàn bộ chuỗi Wave.

3. Phân tích chuỗi Wave thành 2 thành phần: Head và Tail 4. Bỏ tất cả dấu ngoặc đơn ở toàn bộ phần Head

5. Nếu Head là Simple move. a. Dừng Tail tạm thời

b. Tất cả các công việc thực hiện trên move này sử dụng Frontal, Nodal và biến môi trường . Các trường hợp có thể xảy ra:

i. Biến mới Nodal hoặc Frontal được tạo nếu thành phần chưa có biến .

ii. Nếu trong chuỗi Wave có câu lệnh CREATE ở ngoài, một trong số act có thể được nhảy tới Node khác. Trong trường hợp này Hop sẽ trả lại Link mới hoặc Node mới.

iii. Head có thể xóa Node hiện tại hoặc Link tới Node hiện tại bới việc gán CONTENT và LINK bằng NONE. Xóa bỏ tất cả các Node hiện tại bằng cách xóa các Link liên kết tới Node đó.

c. Gửi các Tail của Wave, kèm theo biến Frontal tới Wave Queue ở trên tất cả các SNR

Trong trường hợp khác

d. Phân tích Head của Wave thành các thành phần riêng (các thành phần này cách nhau bởi dấu phẩy). Nếu mỗi thành phần riêng này vẫn còn các thành phần trong nó nhỏ hơn và cách nhau bởi dấu phẩy, thì công việc tách được tiếp tục cho tới khi các thành phần nhỏ trở thành Simple move.

e. Thay thế và gắn Tail vào mỗi thành phần được chia ở trên. Do đó Wave mới sẽ nhận được các Tail này.

f. Đưa các chuỗi Wave thu được, kèm theo biến Frontal, tới hàng đợi Wave Queue của máy tính hiện tại.

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 29 - 30)