मेरे पास vba/vb6 एक लेक्सर/पार्सर के लिए .g4 व्याकरण है, जहां लेक्सर लाइन निरंतर टोकन छोड़ रहा है - उन्हें छोड़कर उन्हें पार्सर तोड़ना नहीं है और यह विकल्प नहीं है। यहाँ प्रश्न में lexer नियम है:अनइंडेंट कोड मेरे व्याकरण को तोड़ता है
LINE_CONTINUATION : ' ' '_' '\r'? '\n' -> skip;
समस्या यह खड़ी कर रहा है, कि जब भी एक निरंतर लाइन स्तंभ 1 से शुरू, पार्सर ऊपर चल रही है है:
Sub Test() Debug.Print "Some text " & _ vbNewLine & "Some more text" End Sub
मैंने सोचा था कि "अरे मुझे पता है! मैं अंडरस्कोर से पहले एक अतिरिक्त व्हाइटस्पेस डालने के लिए एएनटीएलआर को खिला रहा हूं, और इसे स्वीकार करने के लिए व्याकरण को बदल दूंगा! "
तो मैं इस तरह नियम बदल दिया है:
LINE_CONTINUATION : WS? WS '_' NEWLINE -> skip;
NEWLINE : WS? ('\r'? '\n') WS?;
WS : [ \t]+;
... और परीक्षण vba कोड ऊपर मुझे इस पार्सर त्रुटि दिया:
extraneous input 'vbNewLine' expecting WS
के लिए अब मेरी एकमात्र समाधान बताने के लिए है मेरी उपयोगकर्ता अपने कोड को सही ढंग से इंडेंट करने के लिए। क्या कोई तरीका है कि मैं उस व्याकरण नियम को ठीक कर सकता हूं?
(Full VBA.g4 grammar file on GitHub)
आप LINE_CONTINUATION को WS में क्यों विलय नहीं करते? –
@IraBaxter 'WS' का उपयोग कई अन्य स्थानों में किया जाता है। आपका क्या अर्थ है? –
आप मूल रूप से सफेद निरंतरता की तरह सफेद निरंतरता चाहते हैं। ठीक है, तो डब्ल्यूएस टोकन के लिए लाइन निरंतरता के व्याख्यात्मक परिभाषा जोड़ें। –