2011-07-17 9 views
5

में कैसे संयोजित करें मैं पार्सर लिखने के लिए parboiled का उपयोग कर रहा हूं। मैंने कुछ तरीकों को परिभाषित किया है:इन तीन विधियों को एक

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) } 

आप देख सकते हैं कि वे बहुत समान हैं। मैं उन्हें एक साथ जोड़ना चाहता हूं, लेकिन मुझे नहीं पता कि यह कैसे करना है। शायद यह होना चाहिए:

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

उत्तर

6

vararg संस्करण के रूप में लागू किया जा सकता:

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

हालांकि, मैं का उपयोग नहीं करते parboiled तो मैं यह परीक्षण नहीं कर सकते।

+0

यह सही है, धन्यवाद! – Freewind

संबंधित मुद्दे