Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Syntaktische Fehler I Ein Vortrag von Stefan Winter & Marc Ruppert.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Syntaktische Fehler I Ein Vortrag von Stefan Winter & Marc Ruppert."—  Präsentation transkript:

1 1 Syntaktische Fehler I Ein Vortrag von Stefan Winter & Marc Ruppert

2 2 Was sind syntaktische Fehler ? Syntax (griech. syntaxis: Zusammenordnung, Lehre vom Satzbau): Eine Sprache wird durch eine Folge von Zeichen, die nach bestimmten Regeln aneinandergereiht werden dürfen, definiert. Den hierdurch beschriebenen Aufbau der Sätze oder Wörter, die zur Sprache gehören, bezeichnet man als ihre Syntax. => Syntaktischer Fehler = grammatikalische Unkorrektheit

3 3 Ist die Syntax so wichtig? Beispiel: syntax griech syntaxis zusammenordnung lehre vom satzbau einer sprache wird durch eine folge von zeichen die nach bestimmten regeln aneinandergereiht werden dürfen definiert den hierdurch beschriebenen aufbau der sätze oder wörter die zur sprache gehören bezeichnet man als ihre syntax

4 4 Beispiele: (C++) int n = = 0; // Vergleich statt Zuweisung float f = 3.14, // fehlendes Ende der Deklaration ; if( n = = 5 n++; // Klammer ) vergessen

5 5 Beispiele #include int main( { int n == 5; float f = 3.14, cout < " n: " << n << endl; cout << " f: " << f << endl; return 0;

6 6 Compilermeldungen Der Compiler erkennt syntaktische Fehler bricht nicht nach dem ersten Fehler ab gibt entsprechende Fehlermeldungen aus

7 7 Behandlung gefundener Fehler Ziele der Fehlerbehandlung 1. Möglichst viele Fehler in einem Durchlauf erkennen 2.Die Analyse von fehlerfreiem Code soll nicht behindert werden 3.Der Parser soll nicht unnötig aufgebläht werden.

8 8 Syntaktische Analyse (parsing) In einem Übersetzer hat die syntaktische Analyse die Funktion, ein Quellprogramm, dargestellt als Folge von Token, in einen Ableitungsbaum zu übertragen. Bsp.: GdI I Praktikum Statement ::=... | Block | VariableDefinition VariableDefinition ::= int | boolean |... Identifier ::= Letter { Letter | Digit | _ }...

9 9 Der Zerteiler Anforderungen an einen Parser Ein Parser liest die zum Quellprogramm gehörende Tokenfolge ein, meldet eventuelle Fehler und gibt den dazugehörigen Ableitungsbaum aus.

10 10 Bsp.: Arithmetischer Ausdruck EBNF eines arithmetischen Ausdrucks expr ::= expr + term | expr – term | term term ::= term * factor | term / factor | factor factor ::= digit | ( expr ) Arithmetischer Ausdruck:9 + 2 – 5

11 11 Beispiel: Syntaxbaum expr – + termexpr term digit factor digit factor digit – 5

12 12 Erläuterungen Zielgerichtete Analyse / Top Down Zerlegung in Unterziele Die Unterziele rekursiv durchgehen

13 13 Rekursiver Abstieg Linksrekursion stellt Problem dar: Bsp.:E ::= E + T | T void E( ) { E( ); Insymbol( ); // + Überlesen T( ); } Nicht immer Behebung möglich!

14 14 Beispiel: fehlerhafter Ausdruck 2 Fehler : ersten gefunden, zweiten überlesen if ( n == 5 n = 6,

15 15 First- & Follow- Mengen Idee: Entscheidung, welche Produktion anzuwenden ist, ist abhängig vom ersten Token der Produktion (FIRST), bzw. bei gleichen FIRST-Token vom darauf folgenden Token (FOLLOW)

16 16 Error Recovery Jede fehlerhafte Eingabe wird vom Parser in eine syntaktisch korrekte umgewandelt. So kann der Parser trotz eines Fehlers den nachfolgenden Code analysieren. Während der Umwandlung: Repair-Mode: Es werden keine Token gelesen, aber eine minimale Sequenz von Token wird verändert/erstellt, um den Fehler zu beheben.

17 17 Error Recovery Beispiel: Modula-2 Quellprogramm MODULE test; BEGIN IF (a = ] 1 write (a) END; END test.

18 18 Error Recovery Fehlermeldungen: 3, 12: Errorsyntax error 3, 12: Informationexpected symbols: Ident Integer Real String ( + – { NOT 3, 14: Informationrestart point 3, 16: Errorsyntax error 3, 16: Informationrestart point 3, 16: Repairsymbol inserted : ) 3, 16: Repairsymbol inserted : THEN

19 19 1. Fehlende Symbole if ( n = = 5n + +; fehlende Klammer festgestellt fehlendes Symbol vielleicht zu spät erkannt fehlt das Symbol oder eines zu viel ? Nicht feststellbar, da Infos verworfen

20 20 2. Falsche Symbole Bsp: n = 15, Falsches Symbol überlesen Bis zum nächsten First-Token lesen

21 21 Noch Fragen ?


Herunterladen ppt "1 Syntaktische Fehler I Ein Vortrag von Stefan Winter & Marc Ruppert."

Ähnliche Präsentationen


Google-Anzeigen