2011-07-17 14 views
5

Używam parboiled do napisania analizatora składni. Zdefiniowałem kilka metod:Jak połączyć te trzy metody w jeden

def InlineCharsBefore(sep: String) 
    = rule { zeroOrMore(!str(sep) ~ InlineChar) } 
def InlineCharsBefore(sep1: String, sep2: String) 
    = rule { zeroOrMore((!str(sep1) | !str(sep2)) ~ InlineChar) } 
def InlineCharsBefore(sep1: String, sep2: String, sep3: String) 
    = rule { zeroOrMore((!str(sep1) | !str(sep2) | !str(sep3)) ~ InlineChar) } 

Widzisz, są bardzo podobne. Chcę je połączyć w jedno, ale nie wiem, jak to zrobić. Może powinno być:

def InlineCharsBefore(seps: String*) = rule { ??? } 

Odpowiedz

6

Wersja vararg mogą być realizowane jako:

def InlineCharsBefore(seps: String*) = { 
    val sepMatch = seps.map(s => ! str(s)).reduceLeft(_ | _) 
    rule { zeroOrMore(sepMatch ~ InlineChar) } 
} 

Jednak nie używam parboiled więc nie mogę go przetestować.

+0

To prawda, dziękuję! – Freewind

Powiązane problemy