2010-09-15 13 views
15

मुझे एक छोटी 'मिनी भाषा' को पार्स करने की ज़रूरत है जो उपयोगकर्ता मेरी साइट पर टाइप कर सकते हैं। मैं सोच रहा था कि लेक्स और जेएसी या एंटरल के समकक्ष php की दुनिया के लिए क्या हैं।php के लिए एक अच्छा पार्सर जेनरेटर क्या है?

उत्तर

0
+1

मैं इस जनरेटर देखा था, लेकिन यह 4 साल पुराना है। मैं सोच रहा था कि – Toad

+11

कुछ और अद्यतित हो सकता है अगली बार लिंक के केवल एक गुच्छा के बजाय कुछ सामग्री देखें। –

+1

@ts। मुझे लगता है कि अब आप जानते हैं, लेकिन यह पूरी तरह से आपकी ज़िम्मेदारी है, और आपका अकेला, एक पोस्ट लेखक के रूप में :) –

6

मैं LIME Parser generator for PHP कुछ साल पहले करता था, और यह पहले से ही परिपक्व और स्थिर था।

पार्सर जेनरेटर स्वयं PHP में लिखा गया है, जो किसी भी तकनीकी अर्थ में वास्तव में कोई फर्क नहीं पड़ता - क्योंकि हमें केवल जेनरेटेड पार्सर PHP में होना चाहिए - लेकिन मुझे यह विवरण पसंद है।

मैं जोड़ने चाहिए:

  1. मैं कहाँ "पुराना" लिखा यह अधिक है कि मैं कहना सही होगा यह मेरे पीएचपी ;-)

    संपादित में सॉफ्टवेयर लेखन के बारे में कम क्षमाप्रार्थी लगता है "के साथ खेला गया"। मैंने अभी तक चूने का उपयोग करके कोई उत्पादन कोड नहीं लिखा है। लेकिन मुझे ऐसा करने का कोई कारण नहीं दिखता है।

  2. चूने के साथ प्रदान किया गया "कैलकुलेटर उदाहरण" एक टोकनिज() विधि का उपयोग करता है जो कि लेक्स की शक्ति के लिए वास्तविक विकल्प से बहुत दूर है। लेकिन अगर आपको वास्तविक टोकननाइज़र की आवश्यकता है तो "बैक एंड" पर चूने को टोकन खाने के लिए "फ्रंट एंड" पर लेक्स का उपयोग करना संभव होना चाहिए।

0

मैंने जेसन, जैस्क्रिप्ट में एक बाइसन क्लोन को PHP में जेसन को पोर्ट किया है। परिणाम एक हत्यारा पार्सर हैं, जो बहुत ही सरल और बहुत जटिल लेक्सिंग/पार्सिंग को संभालने में सक्षम हैं। यह अब जेसन का हिस्सा है, लेकिन मेरे कांटा में कुछ अपडेट हैं - https://github.com/robertleeplummerjr/jison। फाइलें यहां हैं - https://github.com/robertleeplummerjr/jison/tree/master/ports/php

उस पृष्ठ में रीडमी देखें, आप एक ही समय में एक जावास्क्रिप्ट और PHP पार्सर बनाते हैं जो समान या अलग-अलग चीजों को करने में सक्षम हैं। ठंडा!

-5

मैं आपको अपना खुद का पार्सर लिखने की सलाह देता हूं, क्योंकि यह आज काफी आसान है।

ऐसा करने का सबसे आसान तरीका मेरी वाक्य में प्रत्येक वाक्यविन्यास प्रकार (अभिव्यक्ति, परीक्षण, पाश, आदि) के लिए एक वर्ग बनाने के लिए मेरी राय में होगा।

प्रत्येक वर्ग में

फिर, कोड निम्न विधियों:

  • एक विधि एक स्ट्रिंग से निर्धारण करेगा अगर स्ट्रिंग दिए गए प्रकार का है (a+b प्रकार 'अभिव्यक्ति' की, if(b) है नहीं)
  • इस प्रकार के "रन" के लिए
  • एक विधि (a+ba->run() + b->run() वापस आ जाएगी, और a->run() मान प्रदान करेगा)
संबंधित मुद्दे