मैं कई ANTLR व्याकरण है कि इस तरह से व्हाइटस्पेस से निपटने का उपयोग देखा है।ANTLR4:</p> <pre><code>WS: [ ntr]+ -> skip; // or WS: [ ntr]+ -> channel(HIDDEN); </code></pre> <p>तो व्हाइटस्पेस दूर फेंक दिया जाता है क्रमशः छिपा चैनल पर भेज दें: व्हाइटस्पेस से निपटने
इस तरह एक व्याकरण के साथ:
grammar Not;
start: expression;
expression: NOT expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r]+ -> skip;
मान्य इनपुट हैं 'सच नहीं' या 'नहीं झूठी' लेकिन यह भी 'nottrue' जो एक वांछित परिणाम नहीं है। के व्याकरण बदलने:
grammar Not;
start: expression;
expression: NOT WS+ expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r];
फिक्स समस्या है, लेकिन मैं प्रत्येक नियम में मैन्युअल रूप से व्हाइटस्पेस को संभालने के लिए नहीं करना चाहती।
आम तौर पर मैं कुछ अपवादों के साथ प्रत्येक टोकन के बीच एक सफेद जगह चाहता हूं (उदा। '! सच' के बीच में एक सफेद जगह की आवश्यकता नहीं है)।
क्या ऐसा करने का कोई आसान तरीका है?
धन्यवाद। यह '* नोट्रू *' (अमान्य) और '*! सच *' (वैध) के लिए वांछित के रूप में काम करता है। क्या आपको यह भी पता है कि मैं इस नियम का अपवाद कैसे बना सकता हूं, ताकि व्हाइटस्पेस को छोड़ने के लिए कुछ अन्य इनपुटों के लिए यह संभव हो? '* ए बी सच्चा *' की तरह, जहां ए और बी के बीच व्हाइटस्पेस वैकल्पिक है। तो यह भी मान्य है: '* एबी सच *', लेकिन '* ABtrue *' नहीं। – flux