Scala parser combinator

Mình muốn parse một cấu trúc if-else của ngôn ngữ lập trình x:

rep(ifCodeBlock) ~ opt(rep(elseIfCodeBlock)) ~ opt(rep(statementOfElseCodeBlock))

Tuy nhiên cách parse này lúc nào cũng trả về 3 list, dù thực tế một đoạn if-else có thể không có else-if và else. Mình mới dùng Scala parser không biết làm thế nào để parse sao cho nếu không có else-if và else thì chỉ trả về một list thôi. Mời cao thủ vào giải quyết dùm trường hợp này…

P.s Trường hợp này cũng tương tự như để parse switch case, nhiều case có thể giống nhau và xài chung một đoạn code, khi đó cách parse là

rep1(value, value) ~ rep(statement)

Chỉ có điều mình vẫn chưa tìm được cách để áp dụng rep1() cho if-else

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?