2017-10-01 54 views
5

Tôi vấp vào ngôn ngữ RED vào ngày khác và chi tiêu (nhiều hơn hoặc ít hơn nghĩa đen) 24 giờ cuối cùng "học" nó. Tôi đã cạn kiệt các kỹ năng googling của mình cố gắng tìm giải pháp cho một vấn đề đơn giản mà chỉ né tránh các kỹ năng và logic của tôi, vì vậy hy vọng ai đó ở đây có thể dẫn tôi đến con đường dẫn đến sự công bình.Phân tích cú pháp Rebol/RED. Lưu mã ASCII từ chuỗi được phân tích cú pháp thành biến?

Như tên đề xuất, tôi đã cố gắng phân tích cú pháp một chuỗi đơn giản (bất kỳ chuỗi văn bản ngẫu nhiên nào), lấy từng ký tự (acter) s và sau đó cố gắng lưu chúng vào một biến. (Một chuỗi/mảng/bất kỳ loại thực sự)

Điều tốt nhất tôi có thể làm là với mã sử dụng:

alpha: charset [#"a" - #"z"] 
testString: "this is just random rambling to test parsing!" 

như điều kiện tiên quyết và một cái gì đó như thế này khi (cố gắng) phân tích:

probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end] 

Lưu mã (chữ cái đầu tiên) mã ascii thành văn bản2 và chạy tập lệnh nhiều lần để thêm mã ASCII (cùng chữ cái đầu tiên) một cách chính xác nhiều lần liên tiếp:

CONSOLE OUTPUT

>> probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end] 
true 
== true 
>> probe text2 
"34" 
== "34" 
>> probe parse teststring [copy text to alpha (append text2 to-integer(to-char text)) to end] 
true 
== true 
>> probe text2 
"3434" 
== "3434" 

Rõ ràng phân tích cú pháp của tôi là không thực sự "lặp" các đặc điểm cá nhân của chuỗi hay không lưu chúng đúng cách trong khi làm việc đó. Có lẽ phân tích cú pháp của tôi thực sự lấy toàn bộ chuỗi từ TO đến END và tôi cố gắng chuyển đổi chuỗi đó thành mã ASCII hoặc cái gì khác đang xảy ra ở đây?

BẤT CỨ trợ giúp sẽ được đánh giá rất cao, vì tôi không thể tiến hành học RED trước khi giải quyết tình trạng khó xử này và hiểu cách phân tích cú pháp thực sự hoạt động trong RED.

+0

Sử dụng 'phân tích-trace 'để gỡ lỗi –

+0

Tôi nghĩ rằng bạn đang thiếu một số nội dung trong mã thử nghiệm điều kiện tiên quyết để tạo lại, như' text2: "" ' –

+0

Rất đúng, văn bản 2 không được khai báo thực sự. Là một miếng dán cẩu thả có vẻ như, xin lỗi vì điều đó. –

Trả lời

3

Tôi không chắc chắn, nếu tôi hiểu câu hỏi của bạn và những gì bạn muốn đạt được, nhưng nếu bạn đang tìm kiếm cho tất cả các đại diện ascii của ký tự bạn có thể nhận được rằng với

asciis: [] 
parse teststring [some [set a alpha (append asciis to-integer a)| skip]] 
== true 
>> asciis 
== [116 104 105 115 105 115 106 117 115 116 114 97 110 100 111 109 114 97 109 98 108 105 110 103 116 111 116 101 115 116 112 97 114 115 105 110 103] 

một số là một trong những từ có sẵn chịu trách nhiệm về vòng lặp

Có một số vấn đề trong bản dùng thử của bạn. Nó sẽ đưa ra một số lỗi trước khi thực hiện bất kỳ chuyển đổi nào. text2 có thể được khai báo trước đó. tới alpha sẽ cung cấp một chuỗi trống "" khi bạn cố sao chép tối đa ký tự alpha đầu tiên. Hãy nhớ rằng đến sẽ chuyển đến và không bao gồm mục tiêu. Bạn không thể chuyển đổi chuỗi rỗng thành ký tự. Nếu chúng ta giả sử cho đến bây giờ không có lỗi xảy ra, thì bạn vẫn còn ở phía trước của chuỗi của bạn và bạn đi thẳng đến cuối chuỗi của bạn.

Một số documentation about Red parse. thấy Iteration về looping

Bạn có thể gỡ lỗi phân tích cú pháp của bạn, hoặc với phân tích cú pháp-trace hoặc chỉ cần đặt một (thăm dò văn bản) đơn giản sau khi một phần của quy tắc của bạn, bạn muốn điều tra:

+1

Cảm ơn bạn, đó là chính xác những gì tôi đã cố gắng để đạt được. Bạn có thể giải thích những gì xảy ra trong mã của tôi và tại sao nó chỉ đưa ra ký tự đầu tiên (mã ASCII)? Nó có trả lại toàn bộ chuỗi giữa các điều kiện phân tích cú pháp của tôi và sau đó "to-char và to-integer" được chuyển đổi thành ký tự đơn và mã ascii của nó không? –

+1

Không yêu thích THU THẬP? 'thu thập [phân tích cú pháp [... (giữ thành số nguyên! a) ...]]' (hoặc nếu chỉ phân tách cú pháp màu đỏ [thu thập [một số [... giữ (thành số nguyên! a) ...]]] ') – rgchris

Các vấn đề liên quan