2010-08-19 38 views
7

Tôi có một số tệp nguồn Perl hợp lý (không bị xáo trộn) và tôi cần một trình mã thông báo, mã này sẽ phân tách thành mã thông báo và trả về loại mã thông báo của mỗi mã, ví dụ: cho kịch bảnLàm thế nào để mã hóa mã nguồn Perl?

print "Hello, World!\n"; 

nó sẽ quay trở lại một cái gì đó như thế này:

  • từ khóa 5 byte
  • khoảng trắng 1 byte
  • dụng dấu ngoặc kép-chuỗi 17 byte
  • dấu chấm phẩy 1 byte
  • khoảng trắng 1 byte

Thư viện nào tốt nhất (tốt nhất là viết bằng Perl) cho điều này? Nó phải hợp lý chính xác, nghĩa là nó có thể phân tích các cấu trúc cú pháp như qq{{\}}}, nhưng nó không phải biết về các trình phân tích cú pháp đặc biệt như Lingua::Romana::Perligata. Tôi biết rằng phân tích Perl là Turing-complete, và chỉ Perl có thể làm đúng, nhưng tôi không cần độ chính xác tuyệt đối: tokenizer có thể thất bại hoặc không tương thích hoặc giả định một số mặc định trong một số trường hợp góc rất hiếm, nhưng nó sẽ hoạt động chính xác phần lớn thời gian. Nó phải được tốt hơn so với tô sáng cú pháp được xây dựng vào một trình soạn thảo văn bản trung bình.

FYI Tôi đã thử các PerlLexer trong pygments, mà làm việc hợp lý cho hầu hết các cấu trúc, ngoại trừ việc nó không thể tìm thấy print từ khóa thứ 2 trong vụ việc này:

print length(<<"END"); print "\n"; 
String 
END 

Trả lời

7

use PPI;

Có , chỉ perl có thể phân tích cú pháp Perl, tuy nhiên PPI là giải pháp đúng 95%.

+0

+1 câu trả lời thú vị – Dacav

Các vấn đề liên quan