2013-07-08 38 views
7

Liên quan đến my earlier question về đối sánh từ khóa phân biệt chữ hoa chữ thường sử dụng cụm từ thông dụng.Đối sánh phân biệt chữ hoa chữ thường trong Marpa

Có thể khớp các chuỗi không phân biệt chữ hoa chữ thường trong Marpa không? Nếu có, làm thế nào?

Giả sử tôi có ngữ pháp

:start ::= script 
identifier ~ [\w]+ 
script ::= 'script' identifier code 
code ::= command* 
command ::= 'run' | 'walk' | 'stop' 

Làm thế nào tôi có thể làm cho nó phù hợp với bất kỳ script, Script, SCRIPT hoặc bất kỳ sự kết hợp khác của chữ thường và chữ hoa?

+0

Chỉ ASCII 7 bit, mã hóa ASCII 8 bit mở rộng trên hệ điều hành yêu thích của bạn hoặc mã Unicode đầy đủ? – hippietrail

+0

Khi dự án được đề cập được viết bằng Perl, tôi giả sử: Dù Perl nghĩ rằng mã hóa chính xác cho dữ liệu là gì. Tuy nhiên, vì ngữ pháp có nghĩa là cho một ngôn ngữ lập trình, ASCII 7 bit sẽ đủ cho các số nhận dạng. – onitake

+0

Perl có lẽ là sự hỗ trợ toàn diện nhất cho các mã hóa khác nhau của bất kỳ ngôn ngữ lập trình nào. Tuy nhiên, tôi không biết liệu Marpa có sử dụng trực tiếp regex của Perl hay tái hiện một tập con giới hạn. Nhưng nói chung trong bất kỳ ngôn ngữ tôi đã luôn luôn sử dụng regexes như '[sS] [cC] [rR] [iI] [pP] [tT]' khi phải đối mặt với điều này. – hippietrail

Trả lời

3

Không có cách nào đơn giản để chỉ định trường hợp không nhạy cảm. Tất nhiên, bạn có thể chuỗi các lớp nhân vật lại với nhau: [sS] [cC] [rR] [iI] [pP] [tT], nhưng điều đó khá khó xử.

Rất tiếc. Các chuỗi phân biệt chữ hoa chữ thường sẽ là một tính năng tốt để thêm vào.

CẬP NHẬT: Kể từ 2.076000, bản phát hành được lập chỉ mục mới nhất, Marpa :: R2 hiện có một công cụ sửa đổi ic cho cả chuỗi và các lớp ký tự, khiến chúng không phân biệt chữ hoa chữ thường. Trong tài liệu, hãy xem https://metacpan.org/pod/Marpa::R2::Scanless::DSL#Single-quoted-stringshttps://metacpan.org/pod/Marpa::R2::Scanless::DSL#Character-classes.

+0

Tôi hiểu. Có cách nào khác ảnh hưởng đến trình phân tích cú pháp G0, như chèn mã chuyển đổi chuỗi thành chữ thường trước khi chúng được gửi để so sánh không? Một giải pháp khác mà tôi có thể nghĩ đến là chuẩn bị đầu vào và chuyển đổi mọi thứ phù hợp với từ khóa đến chữ thường trước. Điều này có thể được thực hiện bằng cách sử dụng 's ///' bình thường. – onitake

+1

Có thể bỏ qua trình phân tích cú pháp G0 và sử dụng máy quét của riêng bạn: https://metacpan.org/module/JKEGL/Marpa-R2-2.062000/pod/Scanless/R.pod#Internal-and-external-scanning. Tôi sẽ phải thêm trường hợp không nhạy cảm với các ưu tiên của tôi cho các tính năng mới. –

+0

Cảm ơn bạn, tôi sẽ có một cái nhìn. – onitake

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