कैसे आप निम्नलिखित पार्सर जेनरेटर में से किसी में एक Parsing Expression Grammar (PEG.js, Citrus, Treetop) जो अजगर/हास्केल/CoffeScript शैली खरोज संभाल कर सकते हैं लिखते थे मौजूदा प्रोग्रामिंग भाषा:अजगर शैली खरोज के लिए पेग
square x =
x * x
cube x =
x * square x
fib n =
if n <= 1
0
else
fib(n - 2) + fib(n - 1) # some cheating allowed here with brackets
अद्यतन: ऊपर दिए गए उदाहरणों के लिए एक दुभाषिया लिखने की कोशिश न करें। मुझे केवल इंडेंटेशन समस्या में दिलचस्पी है। एक और उदाहरण निम्नलिखित पार्सिंग हो सकता है:
foo
bar = 1
baz = 2
tap
zap = 3
# should yield (ruby style hashmap):
# {:foo => { :bar => 1, :baz => 2}, :tap => { :zap => 3 } }
मैं साइट्रस और ट्रीटॉप से परिचित नहीं हूं, लेकिन हालांकि पीईजी.जेएस एक साफ छोटा सा उपकरण है, यह इस प्रकार की व्याख्या, आईएमओ के लिए बहुत छोटा है। साथ ही, मुझे नहीं लगता कि कोई व्यक्ति (काफी) सरल व्याकरण फ़ाइल (एम्बेडेड क्रियाओं के साथ) को ऐसी भाषा की व्याख्या करने में सक्षम होगा, जिसमें व्याकरण परिभाषित करने के अलावा इसमें बहुत कुछ कोड शामिल है: एएसटी चलना, डेटा को सहेजना अलग-अलग क्षेत्रों, स्कॉप्स में वेरिएबल्स को हल करना और संभवतः यहां तक कि पॉप-अप स्कॉप्स भी अगर कोई निश्चित चर नहीं मिलता है। –
पीएस आप अपने प्रश्न से इस तरह से पूछते हैं जैसे कि आपके पास जवाब है। क्या यह एक असली सवाल है, या एक पहेली के अधिक? यदि यह एक वास्तविक सवाल है, तो मैं आपको अनुशंसा करता हूं कि आप [भाषा कार्यान्वयन पैटर्न: अपना स्वयं का डोमेन-विशिष्ट और सामान्य प्रोग्रामिंग भाषाएं बनाएं] (http://www.pragprog.com/titles/tpdsl/language-implementation-patterns) एक कोशिश करें: यह भी बताता है कि पाइथन जैसी भाषा का अर्थ कैसे लिया जा सकता है (कम से कम "इंडेंट-सेंसिटिव" भाग, जो है)। –
हाय बार्ट, पुस्तक लिंक के लिए धन्यवाद। दुर्भाग्य से मेरे पास जवाब नहीं है। मुझे पता है कि ऊपर दिए गए उदाहरणों में दी गई भाषा के लिए एक दुभाषिया बनाना मामूली नहीं है, लेकिन यह वही नहीं है जो मैं यहां उम्मीद करता हूं। मुझे केवल इस हिस्से में दिलचस्पी है कि कैसे कोई इंडेंटेशन भाग/पार्सिंग की समस्या को संभालेगा। मैं वास्तव में एक हाथ से लिखित पार्सर लिखने में सक्षम हूं जो इंडेंटेशन स्तरों का ट्रैक रखता है, लेकिन मैं किसी भी तरह पीईजी पर अवधारणा को मानचित्रित करने के लिए बुरी तरह विफल रहता हूं। किसी भी मदद की सराहना की है। मैट – Matt