If/else स्टेटमेंट्स विद एएनटीएलआर 4
एएनटीएलआर 4 डिफ़ॉल्ट रूप से श्रोताओं का उपयोग करता है, लेकिन यह आगंतुकों का भी समर्थन करता है। विज़िटर पार्स ट्री के ट्रैवर्सल पर अधिक नियंत्रण प्रदान करते हैं, जिससे वे यदि/अन्यथा कथनों को लागू करने के लिए अधिक उपयुक्त हो जाते हैं। विज़िटर को सक्षम करने के लिए, निम्न कमांड चलाएँ:
java -cp antlr-4.0-complete.jar org.antlr.v4.Tool Mu.g4 -visitor
यह MuBaseVisitor नामक एक क्लास उत्पन्न करेगा
public class EvalVisitor extends MuBaseVisitor {
// Override visit methods for each rule that needs to be implemented
// Example: visitIf_stat for handling if/else statements
@Override
public Value visitIf_stat(MuParser.If_statContext ctx) {
List conditions = ctx.condition_block();
boolean evaluatedBlock = false;
for (MuParser.Condition_blockContext condition : conditions) {
Value evaluated = this.visit(condition.expr());
if (evaluated.asBoolean()) {
evaluatedBlock = true;
this.visit(condition.stat_block()); // Evaluate the true block
break;
}
}
if (!evaluatedBlock && ctx.stat_block() != null) {
this.visit(ctx.stat_block()); // Evaluate the else block
}
return Value.VOID;
}
}
यहां, हम शर्तों को दोहराते हैं और पहली सच्ची स्थिति का मूल्यांकन करते हैं। यदि कोई शर्त सत्य नहीं है और कोई अन्य ब्लॉक मौजूद है, तो हम इसके बजाय उसका मूल्यांकन करते हैं। मुख्य { सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) अपवाद फेंकता है { MuLexer लेक्सर = नया MuLexer(नया ANTLRFileStream("test.mu")); MuParser पार्सर = नया MuParser(नया CommonTokenStream(lexer)); ParseTree पेड़ = parser.parse(); EvalVisitor विज़िटर = नया EvalVisitor(); विज़िटर.विज़िट(पेड़); // मूल्यांकन प्रक्रिया प्रारंभ करें } }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3