• 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)

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

UE zu Übersetzerbau Syntaxanalyse 1

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)

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) {

UE zu Übersetzerbau Syntaxanalyse 2

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)

Panic Mode

Beim ersten Fehler Analyse abbrechen

Abbruch mit throw new Errors.PanicMode();

Error wird von den Testfällen gefangen und ausgewertet

Nicht System.exit(0); , weil es VM beendet

JUnit Testlauf unterbricht

UE zu Übersetzerbau Syntaxanalyse 3

(4)

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

private void SSSS () { check(aaaa);

BBB

B();

check(cccc);

SEQUENZ

check(cccc);

}

(5)

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

private void S S S () {S switch (sym) {

case aaaa:

scan(); break;

ALTERNATIVEN first(B) = { e, f }

scan(); break;

case eeee: case ffff:

// Erkennung von e und f in B!

B BB

B(); check(cccc); break;

case dddd:

scan(); break;

default:

error(...);

} }

(6)

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

private void SSSS () { ODER:

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

scan(); break; scan();

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

scan(); break; scan();

case eee: case fe ff:f } else if (sym == eeee ||

sym == ffff) { B

BB

B(); break; BB();BB default: } else {

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

} }

check(cccc); check(cccc);

}

(7)

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

private void SSSS () { ODER:

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

scan(); break; scan();

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

scan(); break; scan();

case eeee: case ffff: } else if (sym == e e e e ||

sym == ffff) { B

BB

B(); break; BBBB();

} }

// kein error // kein error

check(cccc); check(cccc);

}

(8)

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

(1)

private void SSSS () {

while (sym == aaaa || sym == eeee || sym == ffff) { if (sym == aaaa) {

scan();

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

scan();

} else { B

BB

B();

}

// kein error

}check(cccc);

}

(9)

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

(2)

private void SSSS () { while (true) {

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

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

scan();

} else if (sym == eeee || sym == fff) {f B

BB

B();

} else {

break;

// Schleife verlassen

} }

check(cccc);

}

(10)

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

(1)

private void SSSS () { B

B B

B();while (sym == aaaa) { scan();

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

scan();

B B B

B();

} }

(11)

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

(2)

private void SSSS () { while (true) {

BB

BB();

if (sym == a) {

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

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

} else { break;

} } }

(12)

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

private void SSSS () { check(aaaa);

while (sym == eeee || sym == ffff) { BB

BB();

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

BB

BB();

} C C C

C();

}

(13)

UE 3: Syntaxanalyse ( Parser )

• Neue Test-Klasse: ParserErrorTest

• Abgabe

elektronisch bis Mi, 11.11.2009, 18:00

alle zum Ausführen benötigten Dateien

auf Papier

nur Parser.java

UE zu Übersetzerbau Syntaxanalyse 13

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