Điều gì làm cho một số điều dễ dàng phân tích hơn những thứ khác?


8

Tôi vừa đọc trang Wikipedia cho WebAssugging và nó nói: Web Webssssugging được thiết kế để phân tích nhanh hơn JavaScript , điều này khiến tôi suy nghĩ, điều gì làm cho một ngôn ngữ hoặc định dạng dữ liệu nhất định nhanh hơn so với các thuật toán khác đã sử dụng?

Câu trả lời:


18

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 functiontừ 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 xyzvà 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) {}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.


1
Điều này có nghĩa là Lisp rất dễ bị phân tích cú pháp?
Moses

9
@Moses: Có, viết một trình phân tích cú pháp lisp ngây thơ là chuyện nhỏ, bởi vì cú pháp là đồng âm với cấu trúc của một cây cú pháp trừu tượng và hầu như không tồn tại sự mơ hồ.
Phoshi

4
Một ví dụ điển hình khác là mã byte, thường có thể được phân tích cú pháp bằng câu lệnh chuyển đổi vòng lặp và đó là nó.
tên của

@whatsisname Thật vậy, điều tương tự cũng áp dụng cho Hội và Web hội thông thường
marstato
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.