मैं एक छोटे से नियमित अभिव्यक्ति पार्सर को लागू करके पारसी सीखने की कोशिश कर रहा हूं। > स्टार - -> exprनियमित अभिव्यक्तियों को पार्स करने के लिए पारसेक का उपयोग
expr = try star
<|> try litE
<|> lit
litE = do c <- noneOf "*"
rest <- expr
return (c : rest)
lit = do c <- noneOf "*"
return [c]
star = do content <- expr
char '*'
return (content ++ "*")
कुछ अनंत छोरों यहाँ हैं हालांकि (जैसे expr:
EXP : EXP *
| LIT EXP
| LIT
मैं के रूप में हास्केल में इस लागू करने के लिए कोशिश की है: BNF में, मेरा व्याकरण कुछ की तरह लग रहा किसी भी टोकन का उपभोग किए बिना) जो पार्सर लूप हमेशा के लिए बनाता है। मुझे सच में यकीन नहीं है कि इसे कैसे ठीक किया जाए, क्योंकि star
की प्रकृति यह है कि यह अंत में अपने अनिवार्य टोकन का उपभोग करती है।
किसी भी विचार?
वाह। यह इतना आसान है कि यह लगभग धोखाधड़ी की तरह लगता है। – Xodarap
'अनुक्रम, विकल्प :: अवधि -> अवधि -> टर्म 'की बजाय' अवधि [-> टर्म' के बजाय यह आसान होगा, लेकिन मुझे लगता है कि यह दर्शाता है कि एएसटी से कैसे निपटना है जो बिल्कुल मेल नहीं खाता पार्स पेड़ ... – pat