2013-05-06 20 views
13

में पहले पार्सर नियम पर रिटर्न घोषणा के साथ समस्याएं मैं का उपयोग कर रहा हूं मेरे पार्सर नियमों के लिए जो पहले पार्सर नियमों के लिए काम करता है।एएनटीएलआर 4 व्याकरण

ARG_ACTION उम्मीद कर रहा एक और पार्सर नियम जो कि उपरोक्त "रिटर्न" का उपयोग नहीं करता जोड़ देते हैं तो एक नियम

मिलान जबकि ANTLR: मेरे व्याकरण में पहली पार्सर नियम रिटर्न घोषणा का उपयोग करता है ANTLR4 इस प्रकार की शिकायत शिकायत नहीं करता है।

यहाँ आप एक व्याकरण समस्या को कम किया है:

grammar FirstParserRuleReturnIssue; 
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
aRule returns [String s]: ID { $s = $ID.text; }; 

मैं पहला नियम है कि व्यवहार की व्याख्या कर सकता है, लेकिन कुछ भी नहीं मिला की एक विशेष भूमिका को खोजने के लिए खोज की। क्या यह एक बग है? क्या मुझे कुछ समझ याद आती है?

उत्तर

13

आप (एक छोटा अक्षर के साथ शुरू) lexer नियम से पहले (एक अपरकेस अक्षर से शुरू) पार्सर नियम लगाने के लिए अपना व्याकरण में की जरूरत है। एक lexer नियम का सामना करने के बाद, [ARG_ACTION के बजाय एक LEXER_CHAR_SET से चलाता है, तो टोकन धारा संकलक द्वारा देखा लगता है कि आप पात्रों जहां वापसी मान होना चाहिए का एक सेट से गुजर रहे हैं।

+0

यह एएनटीएलआर में एक बग की तरह लगता है, है ना? –

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