अस्वीकरण मेटा-कैरेक्टर, ~
, एएनटीएलआर के लेक्सर- और पार्सर नियमों में उपयोग कैसे किया जा सकता है?लेक्सर- और पार्सर नियमों के अंदर नकारात्मक
उत्तर
नकारात्मक lexer and parser rules के अंदर हो सकता है।
लेक्सर नियमों के अंदर आप पात्रों को अस्वीकार कर सकते हैं, और पार्सर नियमों के अंदर आप टोकन (लेक्सर नियम) को अस्वीकार कर सकते हैं। लेकिन दोनों लेक्सर- और पार्सर नियम क्रमशः एकल वर्ण, या एकल टोकन को अस्वीकार कर सकते हैं।
उदाहरण के एक जोड़े:
lexer नियम
लोअरकेस ascii पत्र को छोड़कर एक या अधिक वर्ण से मेल करने के लिए आप कर सकते हैं:
NO_LOWERCASE : ~('a'..'z')+ ;
(निषेध-मेटा-चार, ~
, +
की तुलना में अधिक प्राथमिकता है, इसलिए ऊपर नियम (~('a'..'z'))+
के बराबर है)
ध्यान दें कि 'a'..'z'
एक भी अक्षर से मेल खाता (और नकार दिया जा वजह सकता है), लेकिन निम्नलिखित नियम अमान्य है:
ANY_EXCEPT_AB : ~('ab') ;
क्योंकि 'ab'
(जाहिर है) 2 से मेल खाता है, यह नकार नहीं किया जा सकता।
ANY_EXCEPT_AB
: 'a' ~'b' // any two chars starting with 'a' followed by any other than 'b'
| ~'a' . // other than 'a' followed by any char
;
पार्सर नियम
अंदर पार्सर नियम, ~
एक निश्चित टोकन, या एक से अधिक को नकारता: नहीं 'ab'
निशानी है कि 2 चरित्र के होते हैं मैच के लिए, लेकिन, आप निम्न कार्य करना होगा टोकन। उदाहरण के लिए, आप निम्नलिखित टोकन को परिभाषित किया है:
A : 'A';
B : 'B';
C : 'C';
D : 'D';
E : 'E';
आप अब A
को छोड़कर किसी भी टोकन मिलान करना चाहते हैं, तो आप कार्य करें:
p : ~A ;
और तुम B
को छोड़कर किसी भी टोकन मिलान करना चाहते हैं और D
, आप कर सकते हैं:
p : ~(B | D) ;
हालांकि, अगर आप किसी भी दो A
के अलावा अन्य टोकनके बाद मिलान करना चाहते हैं, आप ऐसा नहीं कर सकते हैं:
p : ~(A B) ;
बस lexer नियमों के साथ के रूप में, आप एक ही टोकन की तुलना में अधिक नकारना नहीं कर सकते।
P
: A ~B
| ~A .
;
ध्यान दें कि .
(डॉट) एक पार्सर नियमों में चार नहीं मैच किसी भी चरित्र के रूप में यह lexer नियम के अंदर करता है: ऊपर पूरा करने के लिए आपको बस इतना करना। पार्सर नियमों के अंदर, यह किसी भी टोकन से मेल खाता है (A
, B
, C
, D
या E
, इस मामले में)।
ध्यान दें कि आप पार्सर नियमों को अस्वीकार नहीं कर सकते हैं। निम्नलिखित अवैध है:
p : ~a ;
a : A ;
- 1. पार्सर और लेक्सर के लिए डिज़ाइन दिशानिर्देश?
- 2. PHP लेक्सर और पार्सर जेनरेटर?
- 3. पार्सर और लेक्सर फ़ाइलें ग्रहण
- 4. antlr 4 लेक्सर या पार्सर
- 5. सामान्य लिस्प के लिए लेक्सर और पार्सर जनरेटर
- 6. एएनटीएलआर में पार्सर नियमों और लेजर नियमों के बीच व्यावहारिक अंतर?
- 7. ट्रिटॉप और नेस्टेड स्टाइलशीट नियमों में सीएसएस/एचएसएस पार्सर
- 8. एएनटीएलआर 4 और मेवेन के साथ स्वचालित रूप से लेक्सर + पार्सर कैसे उत्पन्न करें?
- 9. मुझे लेक्सर और पार्सर के बीच की रेखा कहां खींचना चाहिए?
- 10. हाथ से एक (खोल) लेक्सर कैसे लिखें
- 11. बीएनएफ व्याकरण से स्कैला कोड उत्पन्न करने के लिए लेक्सर/पार्सर
- 12. जावास्क्रिप्ट भाषा फ़ाइल के लिए एक अच्छा डेल्फी लेक्सर/पार्सर क्या होगा?
- 13. सी में प्रभावी रूप से एक दुभाषिया (लेक्सर + पार्सर) का निर्माण कैसे करें?
- 14. क्या मैं पीडीडीएल फ़ाइल को पार्स करने और जावा प्रोग्राम में डेटा वापस करने के लिए एंटरल निर्मित लेक्सर/पार्सर का उपयोग कर सकता हूं?
- 15. सी #/.NET लेक्सर जेनरेटर
- 16. यादृच्छिक और नकारात्मक संख्या
- 17. निर्वाचन क्षेत्र पार्सर और निर्भरता पार्सर के बीच अंतर
- 18. गुणा के बाद नकारात्मक मान नकारात्मक- जावा
- 19. सी अलियासिंग नियमों और memcpy
- 20. लेक्सर जावास्क्रिप्ट में लिखा है?
- 21. कंपाइलर और नकारात्मक संख्या प्रतिनिधित्व
- 22. पार्सर जेनरेटर और रैगेल ... अपना खुद का डी पार्सर बनाना
- 23. एएनटीएलआर लेक्सर नियम अस्पष्टताओं को हल करने का सही तरीका?
- 24. इष्टतम नकारात्मक स्थान?
- 25. बूलियन और मैथ एक्सप्रेशन पार्सर
- 26. नियमों को परिभाषित AllegroGraph ट्रिपल और उन्हें
- 27. ड्रॉल्स नियमों में मानचित्र और तार
- 28. सीएसएस पार्सर का परीक्षण कैसे करें?
- 29. नकारात्मक सीएसएस चयनकर्ता
- 30. रूबी के ऑप्शन पार्सर
स्पष्टीकरण के लिए धन्यवाद। मुझे पता नहीं था कि एक पार्सर नियम में होने पर '~' ऑपरेटर टोकन पर लागू होगा। – Gunther
@ गुंटर, कोई समस्या नहीं। मैं अक्सर अपने उत्तरों में संक्षेप में इसका जिक्र करता हूं, इसलिए अब से मैं इस क्यू एंड ए से लिंक कर सकता हूं। W.r.t. आपका कनवर्टर, शायद आप पहले से ही इसका उपयोग कर रहे हैं, लेकिन शायद नहीं: 'org.antlr.tool.Strip' वर्ग एएनटीएलआर व्याकरण फ़ाइलों से सभी कस्टम कोड हटा देता है जो एएनटीएलआर व्याकरण को पार्स करते समय आपके जीवन को आसान बना सकता है। –