Máy tạo phân tích cú pháp không cần máy quét. Nhưng bạn khá điên rồ nếu bạn không sử dụng.
Trình phân tích cú pháp được tạo bởi trình tạo trình phân tích cú pháp không quan tâm đến những gì bạn cung cấp cho chúng, miễn là bạn gọi chúng là mã thông báo.
Để xây dựng sử dụng trình tạo trình phân tích cú pháp không có máy quét, chỉ cần xác định ngữ pháp của bạn xuống cấp độ ký tự và cấp các ký tự riêng lẻ cho trình phân tích cú pháp dưới dạng mã thông báo.
Lý do điều này là điên rồ là phân tích cú pháp là một hoạt động phức tạp hơn là lexing. Bạn có thể xây dựng các lexers như các máy trạng thái hữu hạn, nó dịch thành mã máy khá nhiều là "so sánh và nhảy tới trạng thái tiếp theo". Đối với tốc độ, đó là thực sự khó khăn để đánh bại. Trình phân tích cú pháp tạo các trình phân tích cú pháp phân tích cú pháp dự đoán gốc (cho hầu hết các máy phát LL như ANTLR) hoặc tra cứu bảng bằng cách băm, tìm kiếm nhị phân hoặc tuyến tính, v.v. tính cách.
Nếu bạn nạp các ký tự vào một trình phân tích cú pháp làm mã thông báo, khi đó nó sẽ chi tiêu nhiều năng lượng tương ứng trên ký tự hơn so với từ khóa tương đương. Nếu bạn xử lý rất nhiều văn bản đầu vào, điều này cuối cùng sẽ quan trọng, cho dù bạn làm điều đó cho hàng nghìn luồng đầu vào nhỏ hoặc một vài luồng thực sự lớn.
Trình phân tích cú pháp GLR không có trình quét bị vấn đề về hiệu năng này, liên quan đến trình phân tích cú pháp GLR được thiết kế để sử dụng mã thông báo.
Công ty của tôi xây dựng một công cụ, the DMS Software Reengineering Toolkit sử dụng trình phân tích cú pháp GLR (và phân tích cú pháp thành công tất cả các ngôn ngữ chung bạn biết và rất nhiều trình soạn thảo không phù hợp, vì nó có trình phân tích cú pháp GLR). Chúng tôi biết về các trình phân tích cú pháp không cần quét và đã chọn không triển khai chúng vì sự khác biệt về tốc độ; chúng tôi có một hệ thống con giống như LEX (nhưng cực kỳ mạnh) theo kiểu cổ điển để xác định các thẻ từ vựng. Trong trường hợp DMS đi ngược mũi với công cụ dựa trên XT (một công cụ có trình phân tích cú pháp GLR không cần trình quét) dựa trên cùng một đầu vào, DMS xuất hiện nhanh gấp 10 lần gói XT. Để công bằng, thử nghiệm được thực hiện là đặc biệt và không lặp đi lặp lại, nhưng vì nó phù hợp với sự nghi ngờ của tôi, tôi thấy không có lý do gì để lặp lại nó. YMMV. Và tất nhiên, nếu chúng ta muốn đi không quét, thì, khá dễ dàng để viết một ngữ pháp với các thiết bị đầu cuối ký tự, như tôi đã chỉ ra.
GLR Trình phân tích cú pháp không cần quét do có một thuộc tính rất đẹp khác không quan trọng đối với hầu hết mọi người. Bạn có thể lấy hai ngữ pháp riêng biệt cho một trình phân tích cú pháp không cần quét, và nghĩa là nối chúng lại, và vẫn nhận được một trình phân tích cú pháp (thường có rất nhiều sự mơ hồ). Điều này rất quan trọng khi bạn đang xây dựng một ngôn ngữ được nhúng vào một ngôn ngữ khác. Nếu đó không phải là những gì bạn đang làm, đây chỉ là một sự tò mò học thuật.
Và, AFAIK, Elkhound không phải là máy quét. (Tôi có thể sai về điều này). (EDIT: 2/10: Hình như tôi đã sai sẽ không phải là lần đầu tiên trong đời của tôi :)
Một vài chi tiết khác "Trình phân tích cú pháp từ trái sang phải từ phải sang trái" được liệt kê tại đây http://en.wikipedia.org/wiki/Comparison_of_parser_generators#Context-free_languages – stacker
@stacker: Wikipedia liệt kê từ vựng của DParser là "được tạo ra"; Và GLR không ngụ ý không có máy quét – Meinersbur
Tôi không hiểu tại sao một máy quét sẽ là một trở ngại cho nhiều ngôn ngữ hoặc ngôn ngữ mà không có từ khóa dành riêng. Máy quét sẽ vẫn hữu ích để ăn các khoảng trắng và các bình luận (ít nhất là thường xuyên), và ghép các ký tự thành các số và các từ. –