स्कैला पार्सर संयोजकों के साथ सी-स्टाइल मल्टी-लाइन टिप्पणियों (यानी, /* ... */
) को पार्स करने के लिए सबसे अच्छा तरीका क्या है?स्कैला पार्सर कॉम्बिनेटर्स: कुशलता से पार्स सी-स्टाइल टिप्पणियां
एक परियोजना में जिसमें मैं शामिल हूं, हम सी-जैसी प्रोग्रामिंग भाषा का विश्लेषण करते हैं, और बहु-पंक्ति टिप्पणियों का समर्थन करना चाहते हैं। हम StandardTokenParsers
का एक उपवर्ग, जो पहले से ही ऐसी टिप्पणियां (StdLexical
के माध्यम से हैंडल का उपयोग करें। हालांकि, वर्ग केवल काफी कम बहु लाइन टिप्पणी के लिए काम करता है, और ढेर अंतरिक्ष अन्यथा से बाहर चलाता है।
हम भी हमारे अपने परिभाषा प्रदान की कोशिश की है खाली स्थान के की बातें अधिक कुशल बनाने के हम एक RegexParser
(another question on StackOverflow से प्रेरित) का इस्तेमाल किया इस प्रकार है:।
class Parser extends StandardTokenParsers {
override val lexical = new StdLexical {
def rp: RegexParsers = new RegexParsers {}
override val whitespace: Parser[Any] = rp.regex("""(\s|//.*|(?m)/\*(\*(?!/)|[^*])*\*/)*""".r).asInstanceOf[Parser[Any]]
}
// ...
}
यह थोड़ा स्थिति में सुधार हुआ है, लेकिन अभी भी एक ढेर अतिप्रवाह का कारण बनता है, तो टिप्पणी कुछ दर्जन लाइनों से अधिक है। कोई विचार यह कैसे सुधारें?