Arvutiteaduse instituut
  1. Esileht
  2. Automaadid, keeled ja translaatorid
EN
Logi sisse

Automaadid, keeled ja translaatorid

  • Ü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!
  • Huviring
  • Bitbucket
  • 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);
    }

    // ...
}
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo