Tôi tự dạy mình sử dụng JavaCC trong một dự án sở thích và có một ngữ pháp đơn giản để viết một trình phân tích cú pháp. Một phần của phân tích cú pháp bao gồm:Giải thích và giải pháp cho cảnh báo của JavaCC "Lựa chọn biểu thức chính quy: FOO không bao giờ có thể được so khớp như: BAR"?
TOKEN : { < DIGIT : (["0"-"9"]) > }
TOKEN : { < INTEGER : (<DIGIT>)+ > }
TOKEN : { < INTEGER_PAIR : (<INTEGER>){2} > }
TOKEN : { < FLOAT : (<NEGATE>)? <INTEGER> | (<NEGATE>)? <INTEGER> "." <INTEGER> | (<NEGATE>)? <INTEGER> "." | (<NEGATE>)? "." <INTEGER> > }
TOKEN : { < FLOAT_PAIR : (<FLOAT>){2} > }
TOKEN : { < NUMBER_PAIR : <FLOAT_PAIR> | <INTEGER_PAIR> > }
TOKEN : { < NEGATE : "-" > }
Khi biên dịch với javacc tôi nhận được kết quả:
Warning: Regular Expression choice : FLOAT_PAIR can never be matched as : NUMBER_PAIR
Warning: Regular Expression choice : INTEGER_PAIR can never be matched as : NUMBER_PAIR
Tôi chắc chắn đây là một khái niệm đơn giản nhưng tôi không hiểu cảnh báo, là một người mới trong cả việc tạo trình phân tích cú pháp và các biểu thức chính quy.
Cảnh báo này có ý nghĩa gì (ở dạng người mới sử dụng như bạn có thể nhận được)?
Tôi không chắc chắn về điều đó, tôi đã thay đổi Float để nó không thể khớp với Integer - {)? "." | ()? "." | ()? "." >} và vẫn nhận được cảnh báo. Tôi ngạc nhiên bởi điều đó, gây ra những gì bạn nói dường như hoàn toàn hợp lý :) –
Grundlefleck
Hmm ... Tôi vẫn nghĩ rằng đó là mơ hồ liên quan nhưng trung thực, kể từ khi tôi đã không thử JavaCC tôi không sử dụng thực sự cho bạn ở đây ... Tôi sẽ trì hoãn và hy vọng ai đó biết nó sẽ trả lời. – Uri