यह विषय बहुत जटिल है। आप पार्सर एल्गोरिदम के लिए Google कर सकते हैं और आपको विस्तृत सामग्री मिल जाएगी।
सामान्य रूप में:
- कम अस्पष्टताओं को हल किया जाना चाहिए, पार्स करने की प्रक्रिया जितनी तेज़ होगी।
- एक निर्णय लेने से पहले जितना अधिक टोकन पर विचार करना होगा, उतना ही अधिक जटिल हो जाएगा।
उदाहरण के लिए:
जब एक जेएस पार्सर function
इस कोड में कीवर्ड देखता function xyz(a, b) {}
है:, फ़ंक्शन कीवर्ड अस्पष्ट है। इसे पहले अगले टोकन को संसाधित करना होगा xyz
और देखना होगा कि यह एक पहचानकर्ता है इससे पहले कि यह तय कर सके कि यह एक फ़ंक्शन घोषणा है।
हालांकि, अगर अगले टोकन थे, तो (
हम एक फ़ंक्शन शाब्दिक के साथ काम कर रहे हैं function(a, b) {}
:। इसके लिए पार्सर को बहुत अलग तरीके से व्यवहार करने की आवश्यकता है, इस प्रकार पार्सर में अधिक कोड, इस प्रकार धीमी निष्पादन।
यदि इन दोनों उद्देश्यों के लिए अलग-अलग कीवर्ड होते हैं, तो कोई अस्पष्टता नहीं होगी:
function_decl xyz(a, b, c) {}
तथा function_lit(a, b, c) {}
हालाँकि, कोई भी ऐसी भाषा में लिखना नहीं चाहेगा। लेकिन WebAssembly को हाथ से नहीं लिखा जाना चाहिए। यह मनुष्य के बजाय भाषा को मशीनों के अनुरूप बनाने की अनुमति देता है।