2009-12-01 11 views
27

मेरे पास एक प्रोजेक्ट है जहां उपयोगकर्ता को जावास्क्रिप्ट में पूरी तरह से लिखा गया ui के लिए निर्देशों का एक सेट परिभाषित करने की आवश्यकता होती है। मुझे निर्देशों की एक स्ट्रिंग को पार्स करने की क्षमता रखने की आवश्यकता है और फिर उन्हें निर्देशों में अनुवादित करने की आवश्यकता है। क्या पार्सिंग के लिए वहां कोई पुस्तकालय है जो 100% जावास्क्रिप्ट है? या जनरेटर जो जावास्क्रिप्ट में उत्पन्न होगा? धन्यवाद!लेक्सर जावास्क्रिप्ट में लिखा है?

+0

आपके प्रश्न को दोबारा पढ़ने से, ... प्राकृतिक भाषा निर्देश लिख रहा है (जावास्क्रिप्ट नहीं)? लेकिन आप जो लिखा है उसे लेना चाहते हैं और इसे जावास्क्रिप्ट में बदलना चाहते हैं? – Mottie

+0

मुझे एक प्रोजेक्ट की आपकी जैसी ही आवश्यकताएं हैं: जावास्क्रिप्ट पार्सर और कोड जनरेटर की आवश्यकता है। क्या आपने किसी का उपयोग करने का फैसला किया है? – Paul

+2

मैंने उपयोग किया: http://jscc.jmksf.com/ मेरे लिए सही काम किया। – Phobis

उत्तर

22

कुछ http://jscc.phorward-software.com/ की तरह कुछ हो सकता है?

जेएस/सीसी JavaScript and ECMAScript -डिवेट्स के लिए पहली उपलब्ध पार्सर विकास प्रणाली है। यह एक उत्पादक कंपाइलर विकास प्रणाली के निर्माण के इरादे से और दोनों लोगों के लिए उपयोग में आसान शैक्षिक वातावरण बनाने के इरादे से विकसित किया गया है, जिसमें पेर्स टेबल पीढ़ी को नीचे-नीचे पार्सिंग में सामान्य किया जाता है।

मंच स्वतंत्र सॉफ्टवेयर यूनियनों दोनों: के लिए रेगुलर एक्सप्रेशन आधारित lexical analyzer जनरेटर मिलान व्यक्तिगत इनपुट चरित्र धारा से टोकन और एक LALR(1) पार्सर जेनरेटर, कंप्यूटिंग एक दिया context-free grammar विनिर्देश के लिए पार्स टेबल और एक स्टैंड का निर्माण -अलोन, काम कर रहे पार्सर। जेएस/सीसी को खिलाया गया संदर्भ-मुक्त व्याकरण Backus-Naur-Form-आधारित मेटा भाषा में परिभाषित किया गया है, और नियम के कमी पर व्यक्तिगत अर्थात् कोड का मूल्यांकन करने की अनुमति देता है।

जे एस/सीसी ही पूरी तरह ECMAScript तो यह कई अलग अलग तरीकों क्रियान्वित किया जा सकता में लिखा गया है: मंच स्वतंत्र, ब्राउज़र आधारित एक वेबसाइट पर एम्बेडेड जावास्क्रिप्ट के रूप में, एक Windows स्क्रिप्ट होस्ट आवेदन के रूप में, एक संकलित रूप में JScript.NET निष्पादन योग्य, मोज़िला/राइनो या मोज़िला/स्पाइडरमॉन्की के रूप में व्याख्या किए गए एप्लिकेशन, या विंडोज़ पर एक वी 8 शेल स्क्रिप्ट, * निक्स, लिनक्स और मैक ओएसएक्स। हालांकि, उत्पादक निष्पादन के लिए, कमांड लाइन संस्करणों का उपयोग करने की अनुशंसा की जाती है। ये संस्करण एक जेएस/सीसी पार्सर विनिर्देश से एक पूर्ण कंपाइलर को इकट्ठा करने में सक्षम हैं, जिसे तब .js जावास्क्रिप्ट स्रोत फ़ाइल में संग्रहीत किया जाता है।

+1

यह यहां स्थानांतरित हो गया है: http://jscc.phorward-software.com/ – KnowHowSolutions

1

'निर्देशों के सेट' के डिजाइन के आधार पर, आप जावास्क्रिप्ट के अंतर्निहित eval फ़ंक्शन का उपयोग करने में सक्षम हो सकते हैं, जो जावास्क्रिप्ट स्रोत को पार करता है; आप निर्देशों को जावास्क्रिप्ट कोड में बदलने के लिए एक सरल अनुवादक लिखने में सक्षम हो सकते हैं।

वैसे, एक्सएसएस छेद के बारे में बहुत सावधान रहें।

+0

यह संभवतः एक वाक्यविन्यास होगा जो जावास्क्रिप्ट के लिए बहुत सरल और असंबंधित है। यह एक और समूह द्वारा परिभाषित किया जा रहा है जिसके साथ मैं काम कर रहा हूं। – Phobis

+0

यदि यह एक बहुत ही सरल वाक्यविन्यास है, तो आप आसानी से जावास्क्रिप्ट में इसे बदलने में सक्षम हो सकते हैं, शायद परिवर्तित स्रोत के लिए सहायक कार्यों के सेट के साथ। – SLaks

4

सरल पार्सिंग कार्यों के लिए मैं प्रैट के Top Down Operator Precedence parser के एक संस्करण का उपयोग करने का बहुत शौकिया हूं। जबकि प्रैट ने पुरानी लिस्प बोलीभाषा का उपयोग करके मूल पत्र लिखा था, वही अवधारणाओं का उपयोग किसी भी भाषा में आसानी से किया जा सकता है। वास्तव में, डगलस क्रॉकफोर्ड ने Top Down Operator Precedence parsing in JavaScript पर एक उत्कृष्ट लेख लिखा, जो आपको केवल वही चाहिए जो आपको चाहिए।

+0

क्या पार्सर डाउनलोड के लिए कुछ उपलब्ध है? मैंने पीडीएफ पढ़ने की कोशिश की लेकिन इसे लॉगिन की आवश्यकता है :( – Mottie

+0

इसके बारे में क्षमा करें। मैंने मूल लिंक को एक मुफ्त पीडीएफ लिंक के साथ बदलने के लिए अपना जवाब संपादित कर लिया है। व्यक्तिगत रूप से, मुझे वास्तव में क्रॉकफ़ोर्ड का लेख अधिक उपयोगी होने के लिए मिला पेपर स्वयं, जिसे मैंने ज्यादातर ऐतिहासिक हितों के मामले में शामिल किया था। यदि आप लिस्प बोलते हैं, तो यहां पेपर पर आधारित कुछ कोड है: http://bit.ly/dFdrl, और यहां पाइथन-आधारित कार्यान्वयन भी है: http://bit.ly/12HNkV। – bcat

0

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

  1. jsandbox - जावास्क्रिप्ट सैंडबॉक्स
  2. Google Caja - आभासी आइफ्रेम।
13

यदि आप जावास्क्रिप्ट पार्सर्स और कोड जेनरेटर बनाना चाहते हैं, तो जावास्क्रिप्ट में मेटाआई कार्यान्वयन देखें।

MetaII Compiler Tutorial

यह सब से एक अद्भुत थोड़ा 10 पेज तकनीकी कागज पर आधारित है:

एक MetaII संकलक ट्यूटोरियल एक पूरी तरह से आत्म निहित संकलक प्रणाली है कि खुद को और अन्य भाषाओं का अनुवाद कर सकते निर्माण से अवगत वैल शोर्रे: मेटा II: ईमानदार-से-देवता 1 9 64 से एक सिंटेक्स-ओरिएंटेड कंपाइलर लेखन भाषा। मेटाइआई कंपाइलर पूर्ण आत्म-वर्णन लगभग 30 लाइनें है! मैं 1970 में इस पीठ से compilers निर्माण करने के लिए कैसे सीखा वहाँ एक दिमाग उड़ा पल जब आप अंततः grok कैसे संकलक खुद को पुनर्जीवित कर सकते हैं ....

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

मैं अपने कॉलेज के दिनों से वेबसाइट लेखक पता है, लेकिन वेबसाइट के साथ कुछ नहीं किया है।

1

यदि आप वास्तव में सिर्फ एक lexer लिए देख रहे हैं, prettify प्रयास करें।

1

आप एक lexer और कुछ नहीं बल्कि एक lexer चाहते हैं तो इस पर एक नज़र डालें: https://github.com/aaditmshah/lexer

यह कोड के कुछ ही लाइनों में लिखा शक्तिशाली सुविधाओं के बहुत सारे के साथ एक शुद्ध जावास्क्रिप्ट lexer है।

6

Jison शायद सबसे अच्छा और सबसे सक्रिय lexer & पार्सर जेनरेटर बाहर वहाँ जावास्क्रिप्ट के लिए है। यह बाइसन और वाईएसी की नकल करता है।

Jison: http://zaach.github.io/jison/

यदि आप चाहते हैं सिर्फ एक हल्के वजन lexer (~ 100 SLOC) आप Lexed.js पर एक नज़र ले जा सकते हैं: https://github.com/tantaman/lexed.js

1

यहाँ एक "छद्म" निर्देश के प्राकृतिक भाषा, जो Chevrotain पार्सिंग डीएसएल साथ में शुद्ध जावास्क्रिप्ट लागू किया गया था के लिए एक पार्सर का एक उदाहरण है कई प्राकृतिक भाषाओं (अंग्रेजी & जर्मन) व्याकरण वंशानुक्रम का उपयोग के लिए समर्थन करते हैं।

Chevrotain की श्रेणी के अंतर्गत आती है यह करता है के रूप में कोई कोड पीढ़ी "पुस्तकालयों बाहर वहाँ पार्सिंग के लिए है कि 100% जावास्क्रिप्ट रहे हैं"। का उपयोग करते हुए Chevrotain "हाथ क्राफ्टिंग" एक पुनरावर्ती सभ्य पार्सर, केवल बिना के समान है सिरदर्द का सबसे जैसे:

  • अग्रावलोकन समारोह सृजन (निर्णय लेने से जो विकल्प लेने के लिए)
  • स्वत: त्रुटि वसूली।
  • बाएं रिकर्सन डिटेक्शन
  • अस्पष्टता जांच।
  • स्थिति जानकारी।
  • ...

Chevrotain कि स्वचालित रूप से संभालती है।

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