Tôi đang sử dụng trình phân tích cú pháp identifier
từ FParsec để phân tích tên của các biến và hàm, thường là hỗn hợp của các ký tự Unicode và ASCII. Nhưng đôi khi tôi đã thoát ký tự Unicode ngay từ đầu (như \u03C0
) hoặc trong số nhận dạng (như swipe_board\u003A_b
). Tôi vẫn có thể làm cho chúng có thể phân tích cú pháp bằng cách sử dụng các tùy chọn isAsciiIdStart
và isAsciiIdContinue
nhưng tôi không thể xác định chức năng tùy chỉnh của riêng mình để xử lý trước trước khi chuẩn hóa. Những gì có thể là một giải pháp ở đây?Sử dụng chức năng tiền xử lý với trình phân tích cú pháp định danh trong FParsec?
Trả lời
Trình phân tích cú pháp identifier
phân tích cú pháp nội bộ trước để phân tích cú pháp một chuỗi và sau đó chuyển đến một ví dụ IdentifierValidator
để xác thực. Vì lớp C# IdentifierValidator
có thể truy cập công khai (mặc dù không được ghi lại), bạn có thể dễ dàng điều chỉnh trình phân tích cú pháp identifier
theo nhu cầu của bạn (bằng cách thực hiện bước phân tích cú pháp chuỗi ban đầu cũng nhận ra các lần thoát).
Phân tích cú pháp nhận dạng hơi phức tạp do hỗ trợ cho cặp thay thế UTF-16, chuẩn hóa và loại ký tự Unicode XID, không được hỗ trợ nguyên gốc trên .NET. Có thể bạn chỉ cần hỗ trợ mã định danh ASCII hoặc UCS-2 được chỉ định theo các loại ký tự được hỗ trợ bởi CharUnicodeInfo.GetUnicodeCategory
, trong trường hợp đó bạn có thể triển khai phân tích cú pháp và xác thực chỉ bằng một bước sử dụng many1Satisfy2
hoặc many1Chars2
.