6.1 Luồng xử lý Wave 60

Một phần của tài liệu Luận văn: Xây dựng trình biên dịch cho ngôn ngữ wave potx (Trang 60 - 64)

Các wave nằm trong WQ độc lập với nhau, do đó sẽ được xử lý đồng thời. Đầu tiên, khi có wave nằm trong WQ, WI sẽ lần lượt lấy ra các wave, tách thành phần wave string và wave envrironment. Chuỗi wave thu được sẽ trải qua 2 giai đoạn: phân tích bởi PU và xử lý bởi EU. Ở giai đoạn phân tích, chuỗi wave được tách ra thành wave head và wave tail. Trong giai đoạn xử lý, wave head sẽ được xử lý ở node hiện tại và phụ thuộc vào kết quả xử lý mà wave tail sẽđược lan tỏa đến các node đích để

tiếp tục quá trình thông dịch.

Quá trình xử lý wave head được chia ra làm 7 trường hợp xử lý bao gồm: hop, action, sectors, control_rule, echo_dot_halt, code_injection, và external_call. Chi tiết về các trường hợp này được mô tả dưới đây:

- 61 -

Hop

Lệnh hop giúp cho wave di chuyển từ node này sang node khác cũng như từ WI này sang WI khác trong mạng. Quá trình xử lý hop như sau:

9 parser: wave string được phân tích thành wave head và wave tail. Wave head được phân tích thành 2 toán hạng và toán tử.

9 process_head: Toán tử xác định được từ bước trên dùng để xác định cấu trúc

điều khiển trong 7 trường hợp xử lý. Trong trường hợp này là hop được xác

định bằng toán tử ‘#’

9 hop: xử lý lệnh hop. Hai toán hạng được xác định giá trị ở vị trí hiện tại trong KN.

9 match_KN: hai toán hạng sẽ được khớp với link và node của KN nối với node hiện tại. Nếu wave ở trong chế độ CREATE thì các link và node mới

được tạo ra. Kết quả của bước này là danh sách các node thỏa mãn điều kiện.

9 spread_branch: Với mỗi node đích, một wave mới được tạo ra cùng với các biến frontal và biến environment ở node hiện tại.

9 replicate_tail: wave tail được gán làm wave string cho mỗi wave mới tạo ra. 9 activate_branch: kích hoạt xử lý các wave.

9 propagate: các wave tạo ra được gửi đến các node đích. Nếu node đích nằm trên cùng KN thì quá trình lan tỏa kết thúc và wave tail được gửi đến các node đích để tiếp tục được xử lý. Ngược lại wave sẽđược gửi ra ngoài mạng

để tới node đích trên KN của máy khác.

Độ dài của chuỗi wave giảm dần do wave head bị mất đi sau mỗi chu trình. Chu trình liên tục được diễn ra cho đến khi chuỗi wave di chuyển sang WI khác hoặc wave tail rỗng. Chuỗi wave rỗng nghĩa là đã được xử lý xong và có thể echo sẽ được gửi đi thông báo trạng thái kết thúc của wave

Action

Các action được thực hiện ngay trên node hiện tại, bao gồm các toán tử gán và các toán tử so sánh. Các action được thực hiện dựa trên hai toán hạng bên trái và bên phải. Trong phép gán, kết quả sẽ được lưu trữ vào toán hạng bên trái. Trong các phép so sánh, trạng thái thực hiện của phép toán sẽ được ước lượng và quá trình xử lý chuỗi wave sẽ dừng lại nếu phép so sanh trả về kết quả là ‘fail’.

Luồng xử lý các action sẽ bao gồm các bước sau:

9 parse: wave head và wave tail được tách ra từ chuỗi wave. Trong trường hợp này toán tửđược xác định là các phép gán hoặc các phép so sánh.

9 process_head: quá trình xử lý chuyển sang xử lý các action

9 action_sequence: xử lý toán tử thu được. Việc xử lý các phép gán và các phép so sánh là khác nhau nên được chuyển thành 2 bước xử lý nhỏ hơn: − process_assign: Đây là bước xử lý cho các phép gán. Kết quả của phép

- 62 -

− process_filter: Các phép so sánh được xử lý. Nếu điều kiện so sánh được thỏa mãn thì quá trình xử lý sẽ tiếp tục, ngược lại việc xử lý sẽ ngừng lại và một echo thể hiện trạng thái thất bại được gửi đi (start_echo)

− resume_tail: Khi action được xử lý xong, quá trình xử lý wave sẽ được tiếp tục lặp lại ở node hiện tại.

Sectors

Nếu trong wave head chứa nhiều sector (mỗi sector phân cách nhau bởi dấu phẩy) thì chuỗi wave sẽđược phân chia ở node hiện tại thành các nhánh khác nhau. Mỗi nhánh nhận một wave string khác nhau, mà mỗi wave string là một sector

được nối với wave tail. Việc xử lý sector cũng gần giống với hop nhưng khác một chút đó là các wave do quá trình xử lý sector sinh ra vẫn tiếp tục được xử lý ở node hiện tại.

Quá trình xử lý các sector sẽ như sau:

9 parse: Wave head và wave tail được chia ra từ chuỗi wave, trong wave head chứa cú pháp của sector (chứa dấu phẩy phân cách). Trong trường hợp này, thay vì xác định các toán từ thì chuỗi wave giữa các sector sẽ được tách ra và trả lại cho bước xử lý tiếp theo.

9 process_head: quá trình xử lý chuyển sang xử lý các sector. 9 sectors: các nhánh ứng với mỗi sector bắt đầu được tạo ra.

9 spread_branches: mỗi nhánh ứng với một sectors được tạo ra trên cùng node hiện tại. Các biến frontal, environment được sao chép cho mỗi nhánh.

9 replicate_tail: wave tail sẽđược sao chép cho mỗi nhánh. Khác với việc sao chép wave tail trong hop, ở đây wave tail được nỗi vào chuỗi wave nằm trong từng nhánh được tách ra từ các sector trước đó. Các dấu ngoặc thừa bị

xóa bỏ.

9 activate_branch: kích hoạt nhánh để xử lý (khác với hop, việc xử lý các sector không có bước propagation do các nhánh vẫn nằm trên node hiện tại) 9 resume_tail: wave string thu được sẽ tiếp tục được xử lý từ bước đầu tiên • Code injection

Ngôn ngữ wave cho phép chèn vào các đoạn chương trình ngay trong quá trình xử lý từ các biến đi cùng wave trong quá trình đi chuyển hay từ các biến nằm trong node mà chuỗi wave đi qua. Đoạn chương trình được đưa vào sẽ nối vào đầu của wave tail và tiếp tục được xử lý trên cùng node với chuỗi wave trước đó.

9 parser: wave head và wave tail được tách ra. Wave head là toán tử ‘^’ đứng trước một biến báo hiệu đoạn mã được chèn thêm vào chính là giá trị của biến đó.

9 process_head: quá trình xử lý chuyển sang xử lý lệnh code injection

9 code_injection: Giá trị của biến được lấy ra và chuyển sang dạng xâu (nếu cần thiết). String thu được sẽ nối vào đầu của wave tail, quá trình xử lý với chuỗi wave tổng hợp lại tiếp tục từđầu trên cùng node hiện tại.

- 63 -

Toán tử external call là cách giao tiếp của WI với các hệ thống khác thông qua hệ điều hành. Một lời gọi external call sẽ tạm dừng nhánh hiện tại và tiếp tục quay lại xử lý sau khi lời gọi kết thúc.

9 parser: Quá trình phân tích gặp toán tử external call (cú pháp của ‘?’) 9 process_head: quá trình xử lý chuyển sang xử lý external call

9 external_call: hai toán tử được lấy giá trị và kết hợp thành lệnh để gọi chương trình. Lệnh này sẽ được gửi đi, nhánh hiện tại sẽ tạm treo cho đến khi chương trình được gọi thực hiện xong và trả về kết quả.

9 resume_tail: chuỗi wave sẽ tiếp tục quay lại quá trình xử lý • Control rule

Chuỗi wave có 2 trạng thái lan tỏa, một là trong trạng thái không có track và một là trong trạng thái track. Khi di chuyển trong trạng thái track, sau mỗi lệnh hop, hoặc xử lý các sector thì sẽ tạo ra track mới nối với track hiện tại.

Một control rule sẽ thiết lập một điểm điều khiển vào node hiện tại, việc điều khiển này được gắn với chuỗi wave nằm trong cặp mở đóng ngoặc của cú pháp rule. Chuỗi wave này gọi là enclosed wave. Quá trình xử lý được chia làm 2 phần:

9 Các biến frontal và environment của nhánh hiện tại sẽ được nhân bản cho enclosed wave, và một track mới được tạo ra.

9 Rule được gán cho track vừa tạo ra để xử lý các echo và wave tail sẽ được treo tại track mới này.

Các luật tuần tự (SQ, OQ, AQ) đảm bảo các nhánh được thực hiện một cách lần lượt. Sau khi kích hoạt các nhánh thì chỉ duy nhất một nhánh được thực hiện và các nhánh khác sẽ tạm treo lại.

Các bước xử lý như sau:

9 parser: Wave head và wave tail được tách ra. Wave head chứa một trong số

các Rule của ngôn ngữ Wave và chuỗi wave nằm trong cặp mở đóng ngoặc. 9 process_head: Quá trình xử lý chuyển sang xử lý rule

9 control_rule: Xứ lý rule trong wave head

9 extract_head: tách wave string nằm trong cặp mở đóng ngoặc của rule, và tách các biến frontal, environment khỏi wave.

9 create_track: tạo ra track mới và track hiện tại (nếu có) sẽ là track cha của track vừa tạo

9 assign_rule: track mới tạo ra sẽđược gán với rule để xử lý các echo về sau. 9 suspend_tail: wave tail sẽđược treo ở track vừa tạo ra.

Echo dot halt

Echo dot halt là các toán từ đặc biệt được xử dụng để kết thúc chuỗi wave đang thực thi trên node hiện tại và gửi lại các echo cho track. Sau đó, wave tail được treo tại track có thểđược tiếp tục lan tỏa trong node hiện tại.

- 64 -

9 parse: wave head và wave tail được tách ra, wave head chứa toán tử echo dot halt (cú pháp của ‘!’).

9 process_head: chuyển quá trình xủ lý sang echo dot halt 9 echo_dot_halt: giá trị của echo được xác định

9 start_echo: echo được gán cho track hiện tại và tiếp tục được lan tỏa lên trên theo track.

9 cancel_tail: wave tail sẽđược xóa bỏ sau khi gửi echo.

Không chỉ có lệnh echo dot halt gửi echo sau khi xử lý mà lệnh hop và các lệnh so sánh cũng gửi echo. Lệnh hop sẽ gửi echo nếu việc khớp các toán hạng với KN thất bại. Các lệnh so sánh cũng gửi echo nếu điều kiện so sánh không được thỏa mãn.

Một phần của tài liệu Luận văn: Xây dựng trình biên dịch cho ngôn ngữ wave potx (Trang 60 - 64)

Tải bản đầy đủ (PDF)

(93 trang)