Ein Vortrag von Stefan Winter & Marc Ruppert

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Extensible Markup Language
Worzyk FH Anhalt Datenbanksysteme für FÜ WS 2004/2005 XML - 1 XML Extensible Markup Language.
DTD XML-Technik Dino Azzano. Definition Document Type Definition Beschreibung der Regeln zum Aufbau aller XML-Dokumente, die zu einer Dokumentklasse.
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
8. Formale Sprachen und Grammatiken
Imperative Programmierung
Gliederung des Inhalts
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Java- Syntax.
ARRAY oder FELD oder VEKTOR
FOR Anweisung.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (05 – Reguläre Ausdrücke) Prof. Dr. Th. Ottmann.
HTML - Eine erste Annäherung
Prof. Dr. rer.nat. Ralph Großmann Fakultät Informatik / Mathematik Sommersemester 2012 Internet-Technologien XML-basierte Techniken Teil Metasprache der.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
Beispiele für Ausdrucksalgebren
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Das erste Programm (Folie 16)
C++ Vererbung und Polymorphie
© 2003 Pohlig Informatikgrundkurs (Pohlig-Häberle) 1 5.Was ist eine Syntax? – Ein bierseliger Bayer im Himmel 5.1 Syntax des frohlockenden Bayern Alois.
Was versteht man unter XML Schema?
Informatik 1 Übung 2.
Grammatik: Satzbau und Wortbildung
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Informatik 1 Letzte Übung.
Lindenmayer-Systeme: Fraktale rekursiv zeichnen
Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Aus-drücke, arithmetische Operatoren.
Informatik I for D-MAVT
Thema: Die Phrasenstrukturgrammatik
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Programmierung 1. Einführung Seite 1
Grundlagen wissenschaftlichen Arbeitens An Overview of C++ Ali CICEK
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
DAS C ++ PROGRAMM Emine Birol. Erste Version: C with classes In 1985, in 1990 und in 1994 hatte C++ Versionen, die weiterzuentwickeln. Der Standart ist.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
© 2004 Pohlig - Taulien Explizite Typenumwandlung.
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Mensch – Maschine - Kommunikation
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Das Java-Hamster-Modell
7. Formale Sprachen und Grammatiken
CONTOH-CONTOH SOAL BESERTA PROGRAMNYA. Buat Pyramid Angka 2 baris, seperti gambar di bawah: #include int main() { clrscr(); int x, y, z, bil=5; for( x.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
1 // 6_1_KKarte als Struct // // demonstriert structs // Bei Behandlung von "Randfällen" nicht robust. // Fehlerhaft !? #include const char ZeilenEnde.
Tabakentwöhnung bei Lungenkrebs – durchführbar und wirksam
Felder (Arrays).
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
VORLESUNG 1 Sprachbau Sememe Sätze Redeteilen Wortformen Wortgruppe Morpheme (Begriffe)
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Syntax: while ( BEDINGUNG ) { // Anweisungen die so lange immer wieder ausgeführt // werden, wie die Bedingung zutrifft } for (INITIALISIERUNG; BEDINGUNG;
REKURSION + ITERATION.
 Präsentation transkript:

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

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

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

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

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

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

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.

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 | “_“ } ...

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.

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

Beispiel: Syntaxbaum 9 + 2 – 5 expr expr – term expr + term factor digit factor digit 5 digit 2 9 + 2 – 5 9

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

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

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

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)

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.

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

Error Recovery Fehlermeldungen: 3, 12: Error syntax error 3, 12: Information expected symbols: Ident Integer Real String ‘(‘ ‘+‘ ‘–‘ ‘{‘ ‘NOT‘ 3, 14: Information restart point 3, 16: Error syntax error 3, 16: Information restart point 3, 16: Repair symbol inserted : ‘)‘ 3, 16: Repair symbol inserted : ‘THEN‘

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

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

Noch Fragen ?