Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ดู Ruby ขณะแยกวิเคราะห์โค้ดของคุณ

ฉันคิดว่าน่าจะสนุกที่จะพักจากเนื้อหาที่เป็นประโยชน์และเป็นประโยชน์เพื่อแสดงเคล็ดลับปาร์ตี้ Ruby ที่เรียบร้อย

ก่อนที่ Ruby จะรันโปรแกรมของคุณ จะต้องแยกวิเคราะห์ก่อน parser เป็นเครื่องของรัฐชนิดหนึ่ง และมีแฟล็กบรรทัดคำสั่งที่ไม่ค่อยมีใครรู้จักซึ่งคุณสามารถใช้เพื่อทำให้ Ruby บันทึกทุกอย่างที่เครื่องของรัฐทำ

ยกตัวอย่างต่อไปนี้:

a = 1 + 2

ถ้าฉันเรียกใช้โดยใช้ -y ตั้งค่าสถานะ ฉันได้รับผลลัพธ์ต่อไปนี้:

$ 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

สิ่งที่เราเห็นที่นี่คือ Ruby parser ที่หมุนเวียนผ่านแต่ละโทเค็นในไฟล์และดำเนินการดังต่อไปนี้:

  • เพิ่มโทเค็นลงในสแต็ก
  • เปรียบเทียบสแต็กกับรายการกฎ
    • หากโทเค็นตรงกับกฎ ให้ทำการเปลี่ยนสถานะ
    • หากไม่ตรงกัน ให้เพิ่มโทเค็นอื่นลงในสแต็กแล้วลองอีกครั้ง

สถานะและกฎทั้งหมดถูกกำหนดไว้ในไฟล์ parse.y ที่ประมวลผลโดยตัวสร้าง parser parser เพื่อสร้าง parser จริงซึ่งอยู่ใน C.