Institute of Computer Science
  1. Main page
  2. Automata, Languages and Compilers
ET
Log in

Automata, Languages and Compilers

  • Üldinfo
  • Ajakava
  • Eksami näidised
  • Teemad
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Automaadid
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
    • 6. Käsitsi parsimine
    • 7. ANTLRiga töötamine
    • 8. Interpretaator
    • 9. Kompilaator
    • 10. Edasi!
  • Süvendus
  • GitHub
  • Moodle
  • Zulip
  • Zoom

AktkAst võimaliku lahenduse struktuur

Mugavad import'id

import week7.AktkParser.*;
import week7.ast.*;

Lahenduse struktuur

Järgnev koodijupp näitab, kuidas saab avaldiste ja lausete AST-i loomiseks kasutada eraldi visitor klasse, millel on erinevad tagastustüübid. Nii saab vältida seda, et avaldiste AST-i loomisel peab igal pool AstNode-sid Expression-iteks cast-ima.

Muidugi pead visitVariable, VariableContext, Identifier, visitExpression ja ExpressionContext asemel kasutama neid nimesid, mis sinu kirjutatud grammatikas vastavatel konstruktsioonidel on.

private static AstNode parseTreeToAst(ParseTree tree) {
    AktkAstStatementVisitor statementVisitor = new AktkAstStatementVisitor();
    return statementVisitor.visit(tree);
}

private static class AktkAstExpressionVisitor extends AktkBaseVisitor<Expression> {
    @Override
    public Expression visitVariable(VariableContext ctx) {
        return new Variable(ctx.Identifier().getText());
    }

    // ...
}

private static class AktkAstStatementVisitor extends AktkBaseVisitor<Statement> {
    private final AktkAstExpressionVisitor expressionVisitor = new AktkAstExpressionVisitor();

    @Override
    public Statement visitExpression(ExpressionContext ctx) {
        // Kui lause koosneb avaldisest, siis selleks, et temast saaks ikkagi lause,
        // tuleb ta avaldise visitoriga töödelda ja pakendada ExpressionStatement'i sisse
        Expression expression = expressionVisitor.visit(ctx);
        return new ExpressionStatement(expression);
    }

    // ...
}
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment