Rexx - Phân tích cú pháp

Một trong những tính năng mạnh mẽ nhất của Rexx là khả năng phân tích cú pháp các giá trị văn bản. Bạn có thể sẽ không thấy điều này trong bất kỳ ngôn ngữ lập trình nào khác.

Định dạng chung của câu lệnh phân tích cú pháp như sau:

Cú pháp

PARSE {UPPER|LOWER|CASELESS} source {template}

Where,

  • UPPER - Nguồn được chuyển thành chữ hoa trước khi phân tích cú pháp.

  • LOWER - Nguồn được chuyển đổi thành chữ thường trước khi phân tích cú pháp.

  • CASELESS - Khi tham số này được truyền, cách viết hoa sẽ bị bỏ qua.

  • source- Đây là nguồn cần được phân tích cú pháp. Có nhiều tùy chọn có sẵn cho việc này và có thể là bất kỳ tùy chọn nào sau đây -

    • ARG - Các đối số của chương trình hoặc thủ tục có thể được sử dụng làm nguồn.

    • LINEIN - Đầu vào dòng tiếp theo có thể được sử dụng làm nguồn.

    • SOURCE - Thông tin nguồn của chương trình có thể được sử dụng làm nguồn.

    • VAR name - Giá trị của một tên biến có thể được sử dụng làm nguồn.

  • template- Tham số này chỉ định cách phân tích cú pháp nguồn. Có nhiều tùy chọn có sẵn cho việc này. Một số trong số chúng được đề cập dưới đây.

    • variable name - Đây là giá trị được gán cho biến.

    • literal string - Một chuỗi ký tự có thể được sử dụng một mẫu để tách chuỗi.

    • #- Vị trí ký tự tuyệt đối trong chính nguồn. Vì vậy, nếu bạn chỉ định giá trị là 5, ký tự thứ 5 sẽ được sử dụng.

    • +#- Vị trí ký tự tương đối trong chính nguồn. Vì vậy, nếu bạn chỉ định giá trị là 5, ký tự thứ 5 sẽ được sử dụng tương đối.

Hãy xem một ví dụ đơn giản về cách phân tích cú pháp có thể được thực hiện trong Rexx.

Thí dụ

/* Main program */ 
parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'"

Chương trình trên phân tích các từ trong cụm từ. Khi một giá trị bao gồm các từ chỉ được phân tách bằng một dấu cách và không có dấu cách ở đầu hoặc cuối, giá trị đó dễ dàng phân tích cú pháp thành một số từ đã biết như sau.

Hàm phân tích cú pháp được sử dụng trong Rexx để nhận một giá trị chuỗi và sau đó chia chúng thành các từ. Trong ví dụ trên, các từ sau đó được tách và sau đó được lưu trữ trong các biến từ.

Kết quả của chương trình trên sẽ như sau:

'This' 
'is' 
'a' 
'Tutorial'

Một ví dụ khác về phân tích cú pháp được hiển thị trong chương trình sau. Lần này chúng ta đang sử dụng mệnh đề while để phân tích cú pháp.

Thí dụ

/* Main program */ 
phrase = 'This is a Tutorial' 

do while phrase <> '' 
   parse var phrase word phrase 
   say "'"word"'" 
   end

Chương trình trên sẽ cho kết quả sau:

'This' 
'is' 
'a' 
'Tutorial'

Phân tích cú pháp vị trí

Rexx cũng cho phép một người làm việc với phân tích cú pháp vị trí. Hãy xem ví dụ về cách chúng ta có thể phân tích cú pháp vị trí với câu lệnh phân tích cú pháp.

Thí dụ

/* Main program */ 
testString = "Doe       John M.   03/03/78  Mumbai              India"; 
parse var testString name1 11 name2 21 birthday 31 town 51 country 
say name1 
say name2 
say birthday 
say town 
say country

Từ ví dụ trên, bạn có thể lưu ý rằng cùng với tên biến, chúng tôi cũng đang chỉ định nơi chuỗi sẽ kết thúc. Vì vậy, đối với tên1, chúng ta nên kết thúc bằng ký tự thứ 11 và sau đó bắt đầu phân tích cú pháp tên2.

Kết quả của chương trình trên sẽ như sau:

Doe 
John M. 
03/03/78 
Mumbai 
India

Bạn cũng có thể dùng relative positional parsing trong trường hợp này.

Thí dụ

/* Main program */ 
testString = "Doe       John M.   03/03/78  Mumbai              India"; 
parse var testString name1 +10 name2 +10 birthday +10 town +20 country 
say name1 
say name2 
say birthday 
say town 
say country

Kết quả của chương trình trên sẽ như hình dưới đây.

Doe 
John M. 
03/03/78 
Mumbai 
India