อะไรที่ทำให้การแยกวิเคราะห์ง่ายกว่าสิ่งอื่น


8

ฉันเพิ่งอ่านหน้า Wikipedia สำหรับWebAssemblyและมันบอกว่า: " WebAssembly คือ ... ออกแบบให้แยกได้เร็วกว่า JavaScript " ซึ่งทำให้ฉันคิดว่าอะไรจะทำให้ภาษาหรือรูปแบบข้อมูลเร็วขึ้นในการแยกวิเคราะห์กว่าอื่น ๆ และขั้นตอนวิธีการแยกวิเคราะห์คืออะไร ใช้?

คำตอบ:


18

หัวข้อนี้ซับซ้อนมาก คุณสามารถ google สำหรับอัลกอริทึม parser และคุณจะได้รับรายละเอียดของวัสดุมากมาย

โดยทั่วไป:

  • ความกำกวมที่น้อยลงจะต้องได้รับการแก้ไขเร็วขึ้นกระบวนการแยกวิเคราะห์
  • ต้องพิจารณาโทเค็นเพิ่มเติมก่อนที่จะทำการตัดสินใจยิ่งซับซ้อนก็ยิ่งได้รับ

ตัวอย่างเช่น
เมื่อ JS parser เห็นfunctionคำหลักในรหัสนี้: function xyz(a, b) {}คำหลักของฟังก์ชั่นนั้นคลุมเครือ ก่อนอื่นมันต้องประมวลผลโทเค็นถัดไปxyzและดูว่ามันเป็นตัวระบุก่อนที่จะสามารถตัดสินใจได้ว่ามันคือการประกาศฟังก์ชั่น

แต่ถ้าโทเค็นถัดไปเป็นเราจะจัดการกับฟังก์ชั่นตัวอักษร:( function(a, b) {}ที่ต้องมีการแยกวิเคราะห์ที่จะทำงานแตกต่างกันมากดังนั้นรหัสเพิ่มเติมในการแยกวิเคราะห์จึงดำเนินการช้าลง

หากมีคำหลักที่แตกต่างกันสำหรับวัตถุประสงค์ทั้งสองนี้จะไม่มีความกำกวม:

function_decl xyz(a, b, c) {} และ function_lit(a, b, c) {}

อย่างไรก็ตามไม่มีใครต้องการที่จะเขียนในภาษาดังกล่าว แต่ WebAssembly ไม่ควรเขียนด้วยมือ ที่ช่วยให้ภาษานั้นถูกปรับให้เข้ากับเครื่องจักรแทนที่จะเป็นมนุษย์


1
นี่หมายความว่า Lisp แยกวิเคราะห์ได้ง่ายมากหรือไม่
โมเสส

9
@Moses: ใช่การเขียน parser ไร้เดียงสาไร้เดียงสาเป็นเรื่องเล็กน้อยเพราะไวยากรณ์เป็น homoiconic กับโครงสร้างของต้นไม้ไวยากรณ์นามธรรมและเกือบจะไม่มีความคลุมเครืออยู่
Phoshi

4
อีกตัวอย่างที่ดีคือ bytecode ซึ่งสามารถแยกวิเคราะห์ด้วยคำสั่ง switch วนลูปและนั่นคือมัน
whatsisname

@whatsisname แน่นอนเช่นเดียวกันกับแอสเซมบลีปกติและเว็บแอสเซมบลี
marstato
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.