350 likes | 569 Views
Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Vorbemerkungen zu Themen #04 - #06 WS 2002/2003. Univ.-Prof. em. Dr. H.-J. Hoffmann (Stand 14. November 2002). Was wird angesprochen? (I). Wo treten Zeichenreihen auf ? Übersetzer <==> Interpreter / Gliederung
E N D
Testen und Analysieren von SoftwareFehlerbehebung und Re-EngineeringVorbemerkungen zu Themen #04 - #06WS 2002/2003 Univ.-Prof. em. Dr. H.-J. Hoffmann (Stand 14. November 2002)
Was wird angesprochen? (I) • Wo treten Zeichenreihen auf ? • Übersetzer <==> Interpreter / Gliederung • Zeichenreihen als Eingabe • Grundzeichen und Phrasenzeichen • Baumstrukturen als Ausgabe • Endliche Automaten • Keller zur Aufnahme von Zeichen • Strategien der Zerlegung von Zeichenreihen:- zielgericht (top-down)- rückschauend (bottom-up) • Semantische Analyse als vorgezogene Interpretation Vorbemerkungen zu Themen #04 - #06
Was wird angesprochen ? (II) • Formale Sprachen- ich lasse hier die Formalismen weg, siehe Literaturangaben - • Formale Spezifikation und Beschreibung der Sprachen- Grammatiken, siehe Literaturangaben - • Automaten • Formale Spezifikation und Beschreibung der Verhaltensweise der Automaten- Zerlegungsalgorithmen, siehe Literaturangaben - Diese Vorbemerkungen versuchen, plausibel zu machen, was zur Bearbeitung der Themen #03 - #06 bekannt und verstanden sein sollte Vorbemerkungen zu Themen #04 - #06
Daten Übersetzer <==> Interpreter (I) Zeichenreihe Baum “Befehle” Ergebnisse (z.B.Bytecode) Analyse /Front end Synthese (Generator) / Back end “AusführendeMaschinerie”(z.B. Virtual machine) \_________________/Übersetzer Interpreter Vorbemerkungen zu Themen #04 - #06
Daten Übersetzer <==> Interpreter (II)(Sonderfall) Zeichenreihe Baum “Befehle” Ergebnisse u.U. Analyse /Front end Synthese (generator) / Back end “AusführendeMaschinerie” \_________________/Übersetzer Interpreter Vorbemerkungen zu Themen #04 - #06
Gliederung (idealisiert, auf Analyse bezogen) Zeichen- Bezeichner- syntakt. semant.- Gütever-analyse analyse Analyse Analyse besserung ••• sequentiell, unabhängig “Zwischensprachen” synchronisiert als (orientiert an)Verbraucher/Produzent/Verbraucher, “Baumstruktur”“verschränkt” / Koroutinen Vorbemerkungen zu Themen #04 - #06
Zeichenreihen als Eingabe ? Leerzeichen Zeilenwechsel ...static¤void¤main¤(String¤args¤[])¤{|¤¤¤¤¤¤System.out.prin... public class hello { public static void main (String args []) { System.out.println ("Hello World"); }} Textende Vorbemerkungen zu Themen #04 - #06
Was ist mit Zeichenreihen zu tun ? • Entfernen typographischer Zeichen(z.B. Leerzeichen, Zeilenwechsel - nicht Textende ! -) • Abgrenzen der “Token” • Schlüsselworttoken • Operatortoken • Bezeichnertoken (einschl. Konstantentoken) public class hello { public static void main (String args []) { System.out.println ("Hello World"); }} Vorbemerkungen zu Themen #04 - #06
Grundzeichen und Phrasenzeichen • Grundzeichen- diese finden Sie auf der Tastatur - • Phrasenzeichen- repräsentieren während der Analyse eine zusammengefaßte Reihe von Grundzeichen und/oderGrund- und Phrasenzeichen - • Zwei Beispiele: publicclasshello{publicstaticvoidmain(<Parameterliste>) { <Funktionsbezeichner>(<Ausgabetext>);}}class-end publicclasshello<Klassenrumpf>class-end Vorbemerkungen zu Themen #04 - #06
Baumstrukturen (als Ausgabe) <Klassendefinition> Ein ziemlichwillkürlichesBeispiel (ineiner Zwischen-stufe) <Klassentyp> <Klassen-bezeichner> publicclasshello<Klassenrumpf>class-end Vorbemerkungen zu Themen #04 - #06
? ? Endliche Automaten (I)(für Zeichenanayse) ? Operator Ziffer ? Ziffer • Ziffer Grund-zustand Gleitpunktzahl Ganze Zahl Regeln der Form:alter Zustandanstehendes Zeichen==> neuer Zustand Fehlerbehandlung ?(siehe Referat #04) Bezeichner bzw.Wortsymbol Bezeichner Buchstaben ? Ziffer ? Buchstaben ? Vorbemerkungen zu Themen #04 - #06
Endliche Automaten (II)(für Zeichenanalyse) • Siehe Beispiel (hier nicht gezeigt) • Bedeutung des “Trennzeichens” der Token(häufig das Leerzeichen !) • Leistungsfähigkeit der Analyse ?(keine geschachtelten / geklammerten Textstrukturen,warum ?) • Tabellensteuerung Vorbemerkungen zu Themen #04 - #06
Bezeichneranalyse Im Seminar nicht behandelt ! Vorbemerkungen zu Themen #04 - #06
Keller zur Aufnahme von Zeichen • Wie sind geschachtelte / geklammerte Strukturen zu analysieren ? • Früheres (von links her) Auftreten bestimmter Zeichen (z.B. von Klammern) muß hinsichtlich Zahl und Stel-lung in die Analyseentscheidungen eingehen können • Also müssen früher aufgetretene Zeichen (vorüber-gehend) gespeichert werden könnenKellerung dieser Zeichen • Grundlage der syntaktischen Analyse Vorbemerkungen zu Themen #04 - #06
Was muß hierstehen ? Strategien der syntaktischen Analyse- der Dijkstra’sche Verschiebebahnhof - Leserichtung yyyy...............yy x’xxx............xx? ?1 (Anfang der) Ausgabe (Ende der) Eingabe ?2 Fehlerbehandlung ?(siehe Referat #05) Sind hier schließlichwieder alle Zeichen ?Keine Phrasenzeichen ! z’zz...z Keller - Entscheidungen bei ?1 und ?2 - Welche Zeichen werden ge- kellert ? Es entstehtPostfix-Notation Vorbemerkungen zu Themen #04 - #06
Beispiel zur Postfixnotation Eingabe(Token nachZeichenanalyse) A := B + C * ( D [ I + 1 ] - E ) / F ( X , Y + Z ) end neue Operatoren Ausgabe A B C D I 1 + []1 E - * F X Y Z + f2/ + :=end---------- ------------indizierte Funktions- Variable Aufruf (ein Index) (zwei Parameter) Welche Zeichen fehlen in der Ausgabe, welche könntendazukommen ? Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- zielgerichtete Analyse (top-down) (I) - Leserichtung xxxx...............xx xxxx............xxx ? (nicht mehr benötigter Anfang der) Eingabe (Ende der) Eingabe zzz...z Keller mit noch nicht erfüllten Zielen, hier? --> “Vergleichen und Wegwerfen des erfüll-ten Ziels (falls Grund-zeichen)” Zur Reduktion anstehen-de , das “Ende” repräsen-tierende Zeichenreihe aus Grund- und Phrasenzei-chen Leserichtung Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- zielgerichtete Analyse (top-down) (II) - Leserichtung z1 z2 :zn xxxx...............xx xxxx............xxx (nicht mehr benötigter Anfang der) Eingabe (Ende der) Eingabe z’z: :zz ? Keller mit Phrasenzei-chen z’ an oberster Stelle, hier ? --> “Absetzen neuer Ziele z1 z2... zn” Zur Reduktion anstehen-de , das “Ende” repräsen-tierende Zeichenreihe aus Grund- und Phrasenzei-chen Leserichtung Vorbemerkungen zu Themen #04 - #06
(siehespäter) Strategien der syntaktischen Analyse- zielgerichtete Analyse (top-down) (III) - • Oberstes Ziel, als erstes auf dem Keller abgelegt:<Programm>. Erfolg, wenn am Schluß Keller leer • Aus den “Produktionen” für ein sich an oberster Stelle des Keller befindliches Ziel z’ wird durch Vergleich links an erster Stelle der Produktion mit anstehendem (Grund-)Zeichen r1 entschieden, welche “Gabel” (d.h. rechte Seite der Produktion z’ ::= r1 ... rn) erwartet wird, und diese dann im Keller abgesetzt (stark vereinfacht). • “Lesen” der Gabel, schließlich Ziel z’ erfüllt. • Üblicherweise k = 1 (Anzahl der auf der Eingabe zur Entscheidungsfindung betrachteten Zeichen) Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- zielgerichtete Analyse (top-down) (IV) - • Zeichen (Ziele bzw. Zwischenziele) in Gabeln im Keller werden bei Übereinstimmung von oben nach unten entfernt • Ausgabe erfolgt bei einer Reduktion • Aufbau des “Zerlegungsbaums” • Dieser entsteht ausgehend von der Wurzel (Knoten<Programm>) • Realisierung durch rekursivenAbstieg (recursive descent, in Anlehnung an endliche Automaten) Fehlerbehandlung ?(siehe Referat #04) Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- rückschauende Analyse (bottom-up) (I) - Leserichtung xxxx...............xx xxxx............xxx ? (nicht mehr benötigter Anfang der) Eingabe (Ende der) Eingabe zzz...z Keller mit bis jetzt noch nicht voll gelesenen Gabeln, hier ? --> “Weiterlesen” Eine “reduzierte” / den “Anfang” reprä-sentierende Zeichen-reihe aus Grund- und Phrasenzeichen Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- rückschauende Analyse (bottom-up) (II) - Leserichtung xxxx...............xx xxxx............xxx z’ (nicht mehr benötigter Anfang der) Eingabe (Ende der) Eingabe Keller an oberster Stel-le mit eingelesener Gabel, hier ? --> “Reduzieren”und “Ab-setzen von z’ (ein Phrasen-zeichen !) als Repräsentant der eingelesenen Gabel ! )” zzz...z ? “reduzierte” / den “An-fang” repräsentierende Zeichenreihe aus Grund- und Phrasenzeichen Vorbemerkungen zu Themen #04 - #06
(siehefrüher) Strategien der syntaktischen Analyse- rückschauende Analyse (bottom-up) (III) - • Keller anfänglich leer. Erfolg, wenn am Schluß allein<Programm> im Keller • Reduziert wird, wenn eine vollständige Gabel gelesen ist- d.h. Entscheidung über Zerlegung zum spätmöglichsten Zeitpunkt ! - (stark vereinfacht). • shift /reduce • Üblicherweise k = 1 (Anzahl der auf der Eingabe zur Entschei-dungsfindung betrachteten Zeichen) Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- rückschauende Analyse (bottom-up) (IV) - • Ausgabe erfolgt bei einer Reduktion • Aufbau des “Zerlegungsbaums” • Dieser entsteht ausgehend von (vielen) Zweigen, die schließlich zur Wurzel (Knoten <Programm>) zusam-mengefaßt sind • Verschränkung mit semantischer Analyse (für syntheti-sierte Attribute leicht) möglich • Realisierung durch LR-Analyse(in Anlehnung an endlicheAutomaten) Fehlerbehandlung ?(siehe Referat #05) Vorbemerkungen zu Themen #04 - #06
Semantische Analyse als vorgezogene Interpretation • Typische “sprachspezifische” Aufgaben der seman-tischen Analyse:- Auflösung überladener Operationen (u.ä.)- Typüberprüfung- Umstellungen zur Güteverbesserung (u.ä.)- Speicherabbildung- Adressierung • “lokales”, an Reihung in ursprünglich vorgelegtem Text orientiertes Vorgehen <==> am Zerlegungsbaum orientiert • Erweiterung um “maschinenspezifische” Aufgaben • Als Einstieg gezeigt an Interpretation von Postfix-Notation Vorbemerkungen zu Themen #04 - #06
Strategien der syntaktischen Analyse- der Dijkstra’sche Verschiebebahnhof - Leserichtung Zur Erinnerung ! yyyy...............yy x’xxx............xx? ?1 (Anfang der) Ausgabe (Ende der) Eingabe ?2 z’zz...z Operatorkeller - Entscheidungen bei ?1 und ?2 - Welche Zeichen werden ge- kellert ? Es entstehtPostfix-Notation Vorbemerkungen zu Themen #04 - #06
Beispiel zur Postfixnotation Eingabe(Token nachZeichenanalyse) Zur Erinnerung ! A := B + C * ( D [ I + 1 ] - E ) / F ( X , Y + Z ) end neue Operatoren Ausgabe A B C D I 1 + []1 E - * F X Y Z + f2/ + :=end---------- ------------indizierte Funktions- Variable Aufruf (ein Index) (zwei Parameter) Vorbemerkungen zu Themen #04 - #06
Semantische Analyse als vorgezogene Interpretation- gezeigt an Interpretation von Postfix-Notation (I) - Leserichtung Operandenkeller p p p p p p p ....... p p p p p p (Ende der) Eingabe ? ooo::oo ? Übernehmen von Operanden, solange bis Operator auftritt, dann? Operator + zugehörige Operanden entnommen ? generierte Befehle Vorbemerkungen zu Themen #04 - #06
Semantische Analyse als vorgezogene Interpretation- gezeigt an Interpretation von Postfix-Notation (II) - Eingabe A B C D I 1 + []1 E - * F X Y Z + f2/ + :=end Ausgabe I + 1 ==> H1D [ H1 ] ==> H2H2 - E ==> H3C * H3 ==> H4Y + Z ==> H5float ( H5 ) ==> H6F ( X , H6 ) ==> H7H4 / H7 ==> H8B + H8 ==> H9H9 ==> A Typüberprüfungbeim jeweiligenGenerieren ! Einfach gehaltene Speicherabbildung Irrtumvorbehalten ! Vorbemerkungen zu Themen #04 - #06
Semantische Analyse als vorgezogene Interpretation- gezeigt an Interpretation von Postfix-Notation (III) - Eingabe A B C D I 1 + []1 E - * F X Y Z + f2/ + :=end Ausgabe I + 1 ==> H1D [ H1 ] ==> H1H1 - E ==> H1C * H1 ==> H1Y + Z ==> H2float ( H2 ) ==> H2F ( X , H2 ) ==> H2H1 / H2 ==> H1B + H1 ==> A Typüberprüfungbeim jeweiligenGenerieren ! Verbesserte Speicherabbildung Irrtumvorbehalten ! Vorbemerkungen zu Themen #04 - #06
Semantische Analyse als vorgezogene Interpretation- gezeigt an Interpretation von Postfix-Notation (IV) - I + 1 ==> H1D [ H1 ] ==> H1H1 - E ==> H1C * H1 ==> H1Y + Z ==> H2float ( H2 ) ==> H2F ( X , H2 ) ==> H2H1 / H2 ==> H1B + H1 ==> A Befehle könnten sofort ausge-führt werden; keine Befehls-generierung erforderlichOperandenkeller wird zur Lauf-zeit ein Wertekeller ! Verbesserte Speicherabbildung Irrtumvorbehalten ! Vorbemerkungen zu Themen #04 - #06
Semantische Analyse (I) • “Attributierung” an den Knoten der Zerlegungsbaums==> “attributierter Baum” • Beispiele von Attributen:- Typ des durch den Knoten repräsentierten Laufzeit- werts- Speicherbedarf dieses Werts- Speicheradresse dieses Werts- In Programmschleifen Aussage über Art der Wert- änderung (z.B. Eignung für lineare Adreßfortschaltung) • ererbte und synthetisierte Attribute • Berechnungsregeln für Attribute • Baumdurchwanderung zur Berechnung der Attribute / vorab bestimmtes “Attributberechnungsprogramm” Vorbemerkungen zu Themen #04 - #06
Semantische Analyse (II) • “Attributierung” an den Knoten der Zerlegungsbaums==> “attributierter Baum” • Beispiele von Attributen:- Typ des durch den Knoten repräsentierten Laufzeit- werts- Speicherbedarf dieses Werts- Speicheradresse dieses Werts- In Programmschleifen Aussage über Art der Wert- änderung (z.B. Eignung für lineare Adreßfortschaltung) • Berechnungsregeln für Attribute • Baumdurchwanderung zur Berechnung der Attribute / vorab bestimmtes “Attributberechnungsprogramm” Fehlerbehandlung ?(siehe Referat #06) Vorbemerkungen zu Themen #04 - #06
ENDEder VorbemerkungenFragen ? Vorbemerkungen zu Themen #04 - #06