Computer >> Máy Tính >  >> Lập trình >> Ruby

Xem Ruby khi nó phân tích mã của bạn

Tôi nghĩ sẽ rất vui nếu tạm dừng nội dung hữu ích, thực tế để chỉ cho bạn một mẹo nhỏ trong bữa tiệc Ruby.

Trước khi Ruby chạy chương trình của bạn, nó phải phân tích cú pháp. Trình phân tích cú pháp là một loại máy trạng thái. Và có một cờ dòng lệnh ít được biết đến mà bạn có thể sử dụng để khiến Ruby ghi lại mọi thứ mà máy trạng thái thực hiện.

Lấy ví dụ sau:

a = 1 + 2

Nếu tôi chạy điều này bằng cách sử dụng -y cờ, tôi nhận được kết quả sau:

$ ruby -y sample.rb
Starting parse
Entering state 0
Reducing stack by rule 1 (line 903):
-> $$ = nterm $@1 ()
Stack now 0
Entering state 2
Reading a token: Next token is token tIDENTIFIER ()
Shifting token tIDENTIFIER ()
Entering state 35
Reading a token: Next token is token '=' ()
Reducing stack by rule 509 (line 4417):
   $1 = token tIDENTIFIER ()
-> $$ = nterm user_variable ()
Stack now 0 2
Entering state 113
Next token is token '=' ()
Reducing stack by rule 100 (line 1764):
   $1 = nterm user_variable ()
-> $$ = nterm lhs ()
Stack now 0 2
...
140 more lines

Những gì chúng ta đang thấy ở đây là trình phân tích cú pháp Ruby đi qua từng mã thông báo trong tệp và thực hiện các hoạt động sau:

  • Thêm mã thông báo vào ngăn xếp
  • So sánh ngăn xếp với danh sách các quy tắc
    • Nếu mã thông báo khớp với một quy tắc, hãy thực hiện chuyển đổi trạng thái
    • Nếu không khớp, hãy thêm một mã thông báo khác vào ngăn xếp và thử lại.

Tất cả các trạng thái và quy tắc được xác định trong parse.y một tệp được trình tạo phân tích cú pháp bison xử lý để tạo ra trình phân tích cú pháp thực tế trong C.