Tôi đang viết một ứng dụng sẽ thực hiện các chuỗi "lệnh" khác nhau. Tôi đã nhìn vào thư viện tổ hợp Scala để mã hóa các lệnh. Tôi tìm thấy trong rất nhiều trường hợp tôi muốn nói: "Những thẻ này là một bộ đơn đặt hàng, và vì vậy chúng có thể xuất hiện theo bất kỳ thứ tự nào, và một số có thể không xuất hiện".Grammars, Scala Parsing Combinators and Orderless Sets
Với kiến thức hiện tại của tôi về văn phạm tiếng tôi sẽ phải xác định tất cả các kết hợp của các chuỗi như vậy (giả ngữ pháp):
command = action~content
action = alphanum
content = (tokenA~tokenB~tokenC | tokenB~tokenC~tokenA | tokenC~tokenB~tokenA .......)
Vì vậy, câu hỏi của tôi là, xem xét tokenA-C là duy nhất, là có một cách ngắn để xác định một tập hợp bất kỳ thứ tự nào bằng cách sử dụng ngữ pháp?
Trong trường hợp này, mỗi mã thông báo là thuộc tính đối tượng kiểu json. Vì vậy, một lệnh có thể trông giống như "tin nhắn todo: liên kết Todo lớp đến cơ sở dữ liệu" do: thứ ba tiếp theo ".Vì vậy, quy tắc chung được định nghĩa trong phong cách scala là một cái gì đó như" token = alphanum ~ ':' ~ repsep (alphanum, ''). Nhưng tôi cần phải xử lý các thuộc tính cụ thể khác nhau. –
Và bạn phải chắc chắn rằng cùng một lần không xảy ra nhiều lần? – ziggystar
Yea đó là kế hoạch, một số thuộc tính là tùy chọn và chúng chỉ nên xuất hiện một lần. –