Chủ đề này rất phức tạp. Bạn có thể google cho các thuật toán phân tích cú pháp và bạn sẽ nhận được nhiều tài liệu chi tiết.
Nói chung:
- Càng ít sự mơ hồ phải được giải quyết, quá trình phân tích cú pháp càng nhanh.
- Càng nhiều mã thông báo phải được xem xét trước khi đưa ra quyết định, nó càng phức tạp hơn.
Ví dụ:
Khi một trình phân tích cú pháp JS nhìn thấy function
từ khóa trong mã này : function xyz(a, b) {}
, từ khóa hàm là mơ hồ. Đầu tiên, nó phải xử lý mã thông báo tiếp theo xyz
và xem đó là mã định danh trước khi có thể quyết định rằng đó là khai báo hàm.
Tuy nhiên, nếu mã thông báo tiếp theo là (
chúng tôi đang xử lý một hàm theo nghĩa đen : function(a, b) {}
. Điều đó đòi hỏi trình phân tích cú pháp phải hành xử rất khác nhau, do đó nhiều mã hơn trong trình phân tích cú pháp, do đó thực thi chậm hơn.
Nếu có các từ khóa khác nhau cho hai mục đích này, sẽ không có sự mơ hồ:
function_decl xyz(a, b, c) {}
và function_lit(a, b, c) {}
Tuy nhiên, không ai muốn viết bằng ngôn ngữ như vậy. Nhưng WebAssugging không được viết bằng tay. Điều đó cho phép ngôn ngữ được điều chỉnh theo hướng máy móc, thay vì con người.