"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ عبارات If/Else في ANTLR 4 باستخدام الزوار؟

كيفية تنفيذ عبارات If/Else في ANTLR 4 باستخدام الزوار؟

تم النشر بتاريخ 2024-11-09
تصفح:277

How to Implement If/Else Statements in ANTLR 4 using Visitors?

عبارات If/else مع ANTLR 4

يستخدم ANTLR 4 المستمعين بشكل افتراضي، ولكنه يدعم الزوار أيضًا. يوفر الزائرون مزيدًا من التحكم في اجتياز شجرة التحليل، مما يجعلهم أكثر ملاءمة لتنفيذ عبارات if/else. لتمكين الزوار، قم بتشغيل الأمر التالي:

java -cp antlr-4.0-complete.jar org.antlr.v4.Tool Mu.g4 -visitor

سيؤدي هذا إلى إنشاء فئة تسمى MuBaseVisitor ، والتي يمكنك توسيعها لتنفيذ الوظيفة المطلوبة. فيما يلي مثال لفئة EvalVisitor:

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;
    }
}

هنا، نقوم بمراجعة الشروط وتقييم الشرط الصحيح الأول. إذا لم يكن أي شرط صحيحًا وكانت كتلة else موجودة، فإننا نقوم بتقييم ذلك بدلاً من ذلك.

لاستخدام هذا الزائر، أنشئ فئة رئيسية لتحليل وتقييم الإدخال:

public class Main {
    public static void main(String[] args) throws Exception {
        MuLexer lexer = new MuLexer(new ANTLRFileStream("test.mu"));
        MuParser parser = new MuParser(new CommonTokenStream(lexer));
        ParseTree tree = parser.parse();
        EvalVisitor visitor = new EvalVisitor();
        visitor.visit(tree); // Start the evaluation process
    }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3