Ưu tiên vận hành được thực hiện trong ANTLR như thế nào?Ưu tiên nhà điều hành ANTLR
Tôi đang sử dụng gói XText/Antlr tại thời điểm này.
Edit:
Tôi đã làm những gì sepp2k gợi ý, và khai thác được ưu tiên làm việc bây giờ, nhưng những thứ như 3 + * cũng làm việc bây giờ. Các nhà khai thác về cơ bản là "rơi qua" cây.
Ngoài ra, tôi đã thử ngữ pháp C trên trang web của ANTLR và điều tương tự cũng xảy ra trong ANTLRworks.
Bất kỳ ai biết vấn đề là gì?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
Cuộc gọi đến Biểu thức có thể là giữa '(' và ')'. Ngoài ra tất cả các nhà khai thác của bạn dường như thiếu một toán hạng bên trái. – sepp2k
Tôi đã sửa nó bằng cách sử dụng phương thức được tìm thấy trong bình luận của tôi. Ngoài ra, toán hạng bên trái đã được di chuyển đến biểu thức thứ nhất để ngăn chặn đệ quy trái. – jameszhao00