2011-05-03 6 views
32

के साथ एक पार्सर लिखने के लिए ट्यूटोरियल मैंने कुछ भाषाओं को देखा है (अर्थात् CoffeeScript और LessCSS) जो जावास्क्रिप्ट पर बनाए गए हैं।जावास्क्रिप्ट

जावास्क्रिप्ट के साथ भाषा/पार्सर्स लिखने के लिए कहीं भी ट्यूटोरियल हैं?

+0

कॉफीस्क्रिप्ट नोड.जेएस पर आधारित नहीं है ("कोर कंपाइलर हालांकि, नोड पर निर्भर नहीं है") और यह डीएसएल नहीं है। स्पष्टीकरण के लिए – Andrey

+0

धन्यवाद। – exupero

+2

http://zaach.github.com/jison/ – Andrey

उत्तर

14

Jison जीएनयू बायसन पार्सर जेनरेटर पर मॉडलिंग किया गया है। यह बाइसन की तरह या जेएसओएन प्रारूप में एक भाषा व्याकरण लेता है और भाषा के लिए जावास्क्रिप्ट पार्सर आउटपुट करता है। यदि आप एक दुभाषिया बनाना चाहते हैं जो किसी अन्य प्रसिद्ध भाषा पर आधारित है, तो शायद कहीं भी एक बाइसन व्याकरण है जो आप जेसन के लिए ट्विक कर सकते हैं। मुझे एक स्क्रैच डीएसएल पर शुरू करने के लिए यह बहुत सरल पाया गया है।

13

आपको क्यों लगता है कि "जावास्क्रिप्ट पर" भाषाओं को लागू करने की मौलिक अवधारणा मूल रूप से जावास्क्रिप्ट पर निर्भर हैं? अधिकांशतः इसकी एक प्रोग्रामिंग भाषा और मानक कंपाइलर-जैसे दृष्टिकोण लागू किए जा सकते हैं; एक "केवल" मशीन निर्देशों के बजाय जावास्क्रिप्ट को संकलित करता है।

यहां बहुत सरल मेटाकंपलिंग विधियों का उपयोग करके कंपाइलर्स लिखने पर एक ट्यूटोरियल है। यह जावास्क्रिप्ट को प्रारंभिक स्थान के रूप में लक्षित करने के लिए होता है, लेकिन यह जावास्क्रिप्ट के लिए भी प्रतिबद्ध नहीं है। यह ट्यूटोरियल "मेटाआई" पर एक वैल शोर्रे द्वारा एक पेपर पर आधारित है, एक प्रकार का मेटाकोम्पाइलर .... दिनांक (हाँ, आप इसे सही पढ़ते हैं)। मैं इस पत्र से मेरी पहली संकलक का निर्माण करने के लिए कैसे लेकिन सीखा (नहीं जावास्क्रिप्ट :) के साथ, और यह अभी भी एक महत्वपूर्ण तकनीक है:

Meta II Compiler Tutorial targeting JavaScript

आप अधिक तत्काल कुछ चाहते हैं, writing a recursive descent parser by hand. पर विचार करें। इनमें से कुछ लिखने के बाद, आप वास्तव में सराहना करेंगे कि मेटाइआई कितनी प्रतिभा है।

+4

डाउनवॉटर: आपके अनुकूल "ध्वज" के बजाय रचनात्मक प्रतिक्रिया को प्राथमिकता दी जाएगी। मुझे नहीं लगता कि यह इस प्रतिक्रिया के बारे में क्या है जो जावास्क्रिप्ट के साथ "भाषाओं का निर्माण" करने के तरीकों के लिए ओपी के अनुरोध को सीधे संबोधित नहीं करता है, क्योंकि यह संदर्भित ट्यूटोरियल है। –

+0

मुझे लगता है कि यह अविश्वसनीय रूप से प्रासंगिक है। एक पार्सर ऐसा कुछ है जो किसी भाषा को मशीन-स्तरीय समझ में व्याख्या करता है। यदि ओपी अपने पार्सर पर कोई वास्तविक शक्ति चाहता है, तो उसे एक कंपाइलर लिखने के बारे में जानने की आवश्यकता होगी; अन्यथा, उसे अपनी परियोजना को बहुत दूर लेने की आजादी नहीं होगी। वह ट्यूटोरियल अनुरोध के बाद ट्यूटोरियल अनुरोध पोस्ट करेगा और धीमे क्रॉल पर खराब दस्तावेज वाले स्पेगेटी कोड के साथ काम करना जारी रखेगा। अगर वह एक कंपाइलर लिखता है, हालांकि, वह अपनी नींद में कोड लिखने में सक्षम होगा। –

1

मैं जावास्क्रिप्ट को संकलित करने और देखने के लिए और अधिक भाषाओं को देखकर शुरू करूंगा और देखें कि वे क्या करते हैं। यहां एक सूची दी गई है: https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

उस पृष्ठ के निचले हिस्से में पार्सर जनरेटर की सूची देखें जो चीजों को थोड़ा आसान बनाता है, जैसे कि जेसन और peg.js.

जावास्क्रिप्ट को संकलित करने वाली वैकल्पिक भाषा लिखते समय कुछ सीमाएं या बाधाएं हैं, क्योंकि जावास्क्रिप्ट को 'बाइटकोड' या अन्य भाषाओं के लिए रनटाइम के रूप में डिज़ाइन नहीं किया गया था। कोई स्थिर प्रकार या वर्ग प्रणाली नहीं है, उदाहरण के लिए, जावा और सी # की तरह। यदि आप उस लिंक पर पृष्ठ के शीर्ष पर सूचीबद्ध कॉफ़ीस्क्रिप्ट और अन्य जावास्क्रिप्ट के कुछ मुद्दों को ठीक करने के लिए केवल मामूली बदलाव कर रहे हैं, तो ऐसी चीजें कोई समस्या नहीं है, लेकिन फिर एक बड़ी समस्या यह है कि क्यों न केवल योगदान इसके बजाय कॉफ़ीस्क्रिप्ट या इसी तरह की भाषाएं।

संबंधित मुद्दे