Tôi đang cố viết một trình phân tích cú pháp nhỏ với Irony. Thật không may tôi nhận được một "xung đột giảm thiểu". Grammars không phải là điểm mạnh của tôi, và tôi chỉ cần thực hiện điều này một chút. Đây là ngữ pháp bị giảm gây lỗi:Sự cố giải quyết xung đột giảm-giảm trong ngữ pháp của tôi
ExpressionTerm := "asd"
LogicalExpression :=
ExpressionTerm |
LogicalExpression "AND" LogicalExpression |
LogicalExpression "OR" LogicalExpression
"xung đột giảm thiểu" có nghĩa là gì và làm cách nào để giải quyết? Tôi thu thập rằng nó có nghĩa là ngữ pháp của tôi là mơ hồ, nhưng tôi không thể xoay logic của tôi đủ để xem như thế nào.
Đã thêm: Để làm rõ - "asd" chỉ đơn giản là chuỗi chữ "asd". Vì vậy, tôi hy vọng rằng các từ ngữ sau đây được phân tích bằng ngữ pháp này:
asd
asd AND asd
asd AND asd OR asd
asd OR asd AND asd OR asd
Added 2: Quên nói, thư mục gốc của ngữ pháp là LogicalExpression
.
Đã thêm 3: Ahh, tôi hiểu rồi! Sự mơ hồ là bởi vì một biểu thức như
asd AND asd OR asd
có thể được hiểu theo hai cách khác nhau:
(asd AND asd) OR asd
asd AND (asd OR asd)
Nhưng làm thế nào tôi có thể giải quyết này? OK, tôi có thể đặt một AND hoặc OR để mạnh hơn cái kia (dù tôi đã tham gia). Nhưng bây giờ tôi thấy rằng lỗi xuất hiện ngay cả khi chỉ có một toán tử. Nói cách khác, điều này cũng tạo ra những lỗi tương tự:
LogicalExpression := "asd" | LogicalExpression "OR" LogicalExpression
Trong trường hợp này, tôi muốn điều này:
asd OR asd OR asd
để được phân tích như sau:
(asd OR asd) OR asd
các phi là gì cách mơ hồ để làm điều này?
Đã thêm 4: OK!
LogicalExpression1 := LogicalExpression1 "OR" LogicalExpression2 | LogicalExpression2
LogicalExpression2 := LogicalExpression2 "AND" LogicalExpression3 | LogicalExpression3
LogicalExpression3 := "NOT" LogicalExpression4 | LogicalExpression4
LogicalExpression4 := "asd" | "(" LogicalExpression1 ")"
Điều này phân tích tất cả biểu thức boolean, với toán tử ưu tiên là NOT-> AND-> OR. "asd" có thể được thay thế bằng biểu thức dành cho các cụm từ của bạn.
Heh, đến để suy nghĩ về nó, tôi bắt đầu nhớ này mô hình từ những ngày của tôi tại trường đại học. : D –