2016-03-18 7 views
7

मैं एक प्रोग्रामिंग भाषा लिख ​​रहा हूं जो पारसीक को इसके पार्सिंग के लिए उपयोग करता है। त्रुटि संदेशों की रिपोर्ट करने के लिए, मुझे getPosition फ़ंक्शनसी के the Pos module से फ़ंक्शन का उपयोग करके, मेरे स्रोत स्थान के साथ लेबल किए गए मेरे वाक्यविन्यास पेड़ का प्रत्येक तत्व मिला है।पारसी: अभिव्यक्तियों की शुरुआत और अंत स्रोत स्थिति प्राप्त करना?

हालांकि, यह केवल प्रत्येक अभिव्यक्ति की शुरुआत की शुरुआत का स्थान देता है, और मुझे शुरुआत और अंत चाहिए, ताकि मैं स्रोत कोड के भीतर अपने पूरे स्थान को हाइलाइट कर सकूं।

क्या इस तरह की चीज पारसी के साथ संभव है? क्या अभिव्यक्ति का अंत बिंदु प्राप्त करने का एक मानक तरीका है जिसे मैं पार्स कर रहा हूं, ताकि मैं इसे अपने एएसटी में शामिल कर सकूं?

+1

मैं को देख recommed "hare" यह सापेक्ष स्थिति के साथ इसे सुलझाने में एक ही समस्या थी। शायद skillmatter2015 सम्मेलन में मैथ्यू पिकरिंग द्वारा की गई बातचीत कुछ अंतर्दृष्टि प्रदान कर सकती है – epsilonhalbe

उत्तर

7

आप पार्स के बाद भी getPosition का उपयोग कर सकते हैं।

import Text.Parsec 
import Text.Parsec.String 

spanned :: Parser a -> Parser (SourcePos, SourcePos, a) 
spanned p = do 
    pos1 <- getPosition 
    a <- p 
    pos2 <- getPosition 
    pure (pos1, pos2, a) 

परीक्षण:

> parseTest (spanned (many1 (char 'a'))) "aaaaafff" 
((line 1, column 1),(line 1, column 6),"aaaaa") 
संबंधित मुद्दे