• Keine Ergebnisse gefunden

Panic Mode

N/A
N/A
Protected

Academic year: 2022

Aktie "Panic Mode"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

UE zu Übersetzerbau Syntaxanalyse 1

Syntaxanalyse mit Rekursivem Abstieg

Satz: a e g c f d b G(S): S = aAb | cAd.

A = eB | f.

B = gS.

next()-->a erkenne S

erkenne a oder c (a erkannt, wähle erste Alternative)

next()-->e erkenne A

erkenne e oder f (e erkannt, wähle 1. Alt.)

next()-->g erkenne B

erkenne g (g erkannt)

next()-->c erkenne S

erkenne a oder c (c erkannt, wähle 2. Alt.)

next()-->f erkenne A

erkenne e oder f (f erkannt, wähle 2. Alt.)

next()-->d (A erkannt)

erkenne d (d erkannt)

next()-->b (S erkannt)

(B erkannt) (A erkannt)

erkenne b (b erkannt) (S erkannt)

(2)

UE zu Übersetzerbau Syntaxanalyse 2

Parser: wichtige Felder &

Methoden

private Token t; // last recognized token private Token la; // lookahead token

private Token.Kind sym; // kind of lookahead token public Scanner scanner; // reference to Scanner private void scan () {

t = la; la = scanner.next(); sym = la.kind;

}

private void check (Token.Kind expected) { if (sym == expected) {

scan();

} else {

error(TOKEN_EXPECTED, expected);

} }

public void error (Message msg, Object... msgParams) { scanner.errors.error(la.line, la.col, msg, msgParams);

// panic mode

throw new Errors.PanicMode();

}

(3)

UE zu Übersetzerbau Syntaxanalyse 3

Panic Mode

• beim ersten gefundenen Fehler wird Analyse abgebrochen

• Abbruch nicht mit System.exit(0); , weil

– dadurch die VM beendet wird

– das beim Testen mit JUnit zum sofortigen Abbruch führt, d.h.

• es werden keine weiteren Test ausgeführt

• es wird kein Ergebnis angezeigt bzw. das GUI wird sofort beendet

• Bessere Lösung:

throw new Errors.PanicMode();

– Error wird von den Testfällen gefangen und ausgewertet

(4)

Bsp 1: S = a B c. S = a B c.

private void S () { check(a);

B();

check(c);

}

SEQUENZ

(5)

Bsp 2: S = a | B c | S = a | B c | d. d.

private void S () { switch (sym) {

case a:

scan(); break;

case e: case f:

// Erkennung von e und f in B!

B(); check(c); break;

case d:

scan(); break;

default:

error(...);

} }

ALTERNATIVEN first(B) = { e, f }

(6)

Bsp 3: S = ( a | B ) S = ( a | B ) c. c.

private void S () { ODER:

switch (sym) { if (sym == a) { case a:

scan(); break; scan();

case e: case f: } else if (sym == e ||

sym == f) { B(); break; B();

default: } else {

error(...); error(...);

} }

check(c); check(c);

}

SEQUENZ mit ALTERNATIVE first(B) = { e, f }

(7)

Bsp 4: S = [ a | B ] c. S = [ a | B ] c.

private void S () { ODER:

switch (sym) { if (sym == a) { case a:

scan(); break; scan();

case e: case f: } else if (sym == e ||

sym == f) { B(); break; B();

} }

// kein error // kein error

check(c); check(c);

}

SEQUENZ mit OPTIONALER ALTERNATIVE first(B) = { e, f }

(8)

Bsp 5: S = { a | B } S = { a | B } c. c. (1)

private void S () {

while (sym == a || sym == e || sym == f) { if (sym == a) {

scan();

} else { B();

}

// kein error

}

check(c);

}

SEQUENZ mit ITERATION first(B) = { e, f }

(9)

Bsp 5: S = { a | B } S = { a | B } c. c. (2)

private void S () { while (true) {

if (sym == a) { scan();

} else if (sym == e || sym == f) { B();

} else {

break;

// Schleife verlassen

}

}check(c);

}

SEQUENZ mit ITERATION first(B) = { e, f }

(10)

Bsp 6: S = B { a B }. S = B { a B }.

(1)

private void S () { B();

while (sym == a) { scan();

} B();

}

SEQUENZ mit ITERATION first(B) = { e, f }

(11)

Bsp 6: S = B { a B }. S = B { a B }.

(2)

private void S () { while (true) {

B();

if (sym == a) { scan();

} else { break;

} } }

SEQUENZ mit ITERATION first(B) = { e, f }

(12)

Bsp 7: S = a { B } C. S = a { B } C.

private void S () { check(a);

while (sym == e || sym == f) { B();

}C();

}

first(B) = { e, f } first(C) = { g, h }

(13)

UE zu Übersetzerbau Syntaxanalyse 13

UE 3: Syntaxanalyse (Parser)

• Keine neuen Angabe- und Test-Klassen

• Abgabe

– siehe Abgabeanleitung auf Homepage!

– elektronisch bis Mi, 14.11.2007, 20:15

• alle zum Ausführen benötigten Dateien – auf Papier

• nur Parser.java

Referenzen

ÄHNLICHE DOKUMENTE

Vous pouvez utiliser le Feuille support pour numériser ces originaux spéciaux dans la Position de chargement support fragile.. Si plusieurs feuilles d’originaux sont chargées,

Lorsque vous utilisez Document Capture Pro, vous pouvez ouvrir la fenêtre en appuyant sur la touche Paramètres détaillés à l’écran Paramètres de numérisation.. ❏ Les

Wenn der Scanner bereits mit dem Netzwerk verbunden ist, können Sie über das Netzwerk einen Computer oder ein Smart-Gerät mit dem Scanner verbinden. Verwenden eines Netzwerkscanners

> Paramètres réseau > État réseau sur le panneau de commande du scanner, puis sélectionnez le statut de méthode de connexion active (État Wi-Fi ou État Wi-Fi Direct)

Selezionare Impostazioni > Impostazioni di rete > Stato rete sul pannello di controllo dello scanner, quindi selezionare lo stato del metodo di connessione attivo (Stato Wi-Fi

Lorsque vous utilisez Document Capture Pro, vous pouvez ouvrir la fenêtre Epson Scan 2 en appuyant sur la touche Paramètres détaillés à l’écran Paramètres de numérisation.. ❏

Lorsque vous utilisez Document Capture Pro, vous pouvez ouvrir la fenêtre Epson Scan 2 en appuyant sur la touche Paramètres détaillés à l’écran Paramètres de numérisation.. ❏

❏ Da der Scanner für den Zugriff auf HTTPS ein selbstsigniertes Zertifikat verwendet, wird im Browser beim Start von Web Config eine Warnung angezeigt; diese zeigt kein Problem an