2012-11-03 8 views
13

इस प्रकार मैं एक पार्सर लिखा है Exception in thread "main" java.lang.StackOverflowError (मैं भी एक BufferedReader में लपेटकर की कोशिश की है), लेकिन मैं पहली बार इतनी तरह एक स्ट्रिंग में फ़ाइल को पढ़ने के द्वारा इसे ठीक कर सकते हैं:स्काला पार्सर Combinator, बड़ी फाइल मुद्दा

val input = io.Source.fromFile("path/to/file") 
val str = input.mkString 
input.close() 
val index = parseAll(invertedIndex, str).get 

यह मामला क्यों है? क्या स्ट्रिंग के रूप में इसे पढ़ने से बचने का कोई तरीका है, यह एक अपशिष्ट लगता है?

+2

अपने ढेर के वर्तमान आकार क्या है, और कितना बड़ा है कि आप अपने ढेर StackOverflowException से बचने के लिए बनाने के लिए है? स्ट्रिंग संस्करण ओवरफ़्लो बनाने के लिए स्टैक कितना छोटा होना चाहिए? (आप अपना स्टैक 16 एमबी पर लॉन्च करके सेट कर सकते हैं: 'स्कैला-जे-एक्सएसएस 16 एम') – DaoWen

+0

मैं सिर्फ डिफ़ॉल्ट स्टैक आकार का उपयोग कर रहा था, लेकिन जब मैंने इसे 16 एम पर सेट किया था तो प्रोग्राम अभी भी 30 मिनट बाद चल रहा था ... – Robert

+1

स्कैला 2.9.2 बग से संबंधित हो सकता है [एसआई -6520] (https://issues.scala-lang.org/browse/SI-6520)। –

उत्तर

1

एक और लाइब्रेरी [1] है जो स्कैला पार्सर संयोजकों की तरह है जो ट्रैम्पोलिनिंग का समर्थन करती है जो आपको स्टैक ओवरफ्लो त्रुटियों को रोकने की आवश्यकता है।

[1] https://github.com/djspiewak/gll-combinators