मैं एएनटीएलआर सीखने की कोशिश कर रहा हूं और साथ ही साथ इसे एक मौजूदा परियोजना के लिए उपयोग कर रहा हूं।एएनटीएलआर के साथ कॉमनटोकनस्ट्रीम में टोकन के पाठ को मैं कैसे संशोधित कर सकता हूं?
मैं उस बिंदु पर पहुंच गया हूं जहां मैं लेक्सर को कोड के एक हिस्से पर चला सकता हूं और इसे कॉमनटोकनस्ट्रीम पर आउटपुट कर सकता हूं। यह ठीक काम कर रहा है, और मैंने सत्यापित किया है कि स्रोत टेक्स्ट उचित टोकन में तोड़ा जा रहा है।
अब, मैं इस स्ट्रीम में कुछ टोकन के पाठ को संशोधित करने में सक्षम होना चाहता हूं, और अब संशोधित स्रोत कोड प्रदर्शित करना चाहता हूं।
उदाहरण के लिए मैं कोशिश की है:
import org.antlr.runtime.*;
import java.util.*;
public class LexerTest
{
public static final int IDENTIFIER_TYPE = 4;
public static void main(String[] args)
{
String input = "public static void main(String[] args) { int myVar = 0; }";
CharStream cs = new ANTLRStringStream(input);
JavaLexer lexer = new JavaLexer(cs);
CommonTokenStream tokens = new CommonTokenStream();
tokens.setTokenSource(lexer);
int size = tokens.size();
for(int i = 0; i < size; i++)
{
Token token = (Token) tokens.get(i);
if(token.getType() == IDENTIFIER_TYPE)
{
token.setText("V");
}
}
System.out.println(tokens.toString());
}
}
मैं स्ट्रिंग शाब्दिक "वी" करने के लिए सभी पहचानकर्ता टोकन का पाठ सेट करने के लिए कोशिश कर रहा हूँ।
टोकन का पाठ करने के लिए अपने परिवर्तनों को नहीं देखा जा सकता है जब मैं tokens.toString फोन क्यों कर रहे हैं()?
मुझे विभिन्न टोकन प्रकार आईडी कैसे पता चल रहा है? मैं अपने डीबगर के साथ चला गया और देखा कि पहचानकर्ता टोकन के लिए आईडी "4" थी (इसलिए शीर्ष पर मेरा निरंतर)। लेकिन मैं अन्यथा कैसे जानूंगा? टोकन नाम में टोकन प्रकार आईडी को मैप करने का कोई अन्य तरीका है?
संपादित करें:
एक बात है कि मुझे के लिए महत्वपूर्ण है मैं टोकन उनके मूल आरंभ और अंत चरित्र पदों के लिए के लिए चाहते हैं। यही है, मैं नहीं चाहता कि वे परिवर्तनीय नामों के साथ अपनी नई स्थिति को प्रतिबिंबित करें "वी" में बदल दें। ऐसा इसलिए है कि मुझे पता है कि टोकन मूल स्रोत टेक्स्ट में कहां थे।
बस सोच रहा है - यह एक आवश्यकता है कि आप ANTLR का उपयोग करें इसके लिए? – cowboydan