EPROG-LU - Aufgabe 4113 (HTML Parser)
4113 html HTML Parser
Kategorie:Informatik
Klasse:schwer
Eingabe:Siehe Spezifikation
Ausgabe:Siehe Spezifikation
Abzugebende Files: html.txt, Main.java, html/*.java , 10390.txt, 10823.txt

Kurzbeschreibung:

Das Programm soll eine eingeschränkte Menge von HTML Tags (<HEAD>, <BODY>, ...) nach vorgegebenen Regeln verarbeiten können. Eingeben wird eine Stringfolge (maximale Länge 300), die aus den HTML Tags und dem Text besteht. Die Einhaltung der vorgegebenen Syntax soll überprüft werden (z. B. Tags müssen wieder geschlossen werden) und bei fehlerhafter Syntax soll eine Fehlermeldung ausgeben werden.

Allgemeine Hinweise:

Aufgabenbeschreibung

Bitte beachten Sie, dass dieses Programm eine Eingabe ähnlich zu HTML Dokumenten verarbeiten können soll, jedoch nur der folgenden Spezifikation genügen und eben diesen Funktionsumfang erfüllen soll.

Das Programm soll eine Stringfolge einlesen und die unten näher spezifizierten HTML Tags interpretieren können. Der Text kann nicht formatiert ausgegeben werden, es soll daher nur angegeben werden, in welcher Art er erscheinen würde (d. h. eine kurze Interpretation (<h2> = Text_sehr_gross, <h3> = Text_gross, ..), gefolgt von einem Leerzeichen, dem unformatierten Text sowie einem Semikolon und einem Leerzeichen. Für Tabellen soll "Tabelle" ausgegeben werden, danach jeweils mit Leerzeichen getrennt wie viele Spalten und Zeilen sie hat und schließlich der Text der Zellen (so formatiert wie oben genannt). Grafiken, Stylesheets und Scripte sind nicht erlaubt. Tags müssen immer geschlossen werden, d. h. einem <xxxx> folgt immmer ein entsprechendes </xxxx>. Einzige Ausnahme ist das Tag <BR>, für das es kein schießendes Tag gibt (falls doch so ist das als fehlerhaft anzusehen). Die Ausgabe des gesamten Programms wird mit "Ende" abgeschlossen.

Erlaubte Tags und die anzuzeigende Interpretation, wobei "-" für keine Interpretation steht:

<xxxx>: Interpretation

<HTML> Konstruktor, muss immer vorhanden sein: -

<HEAD> innerhalb dieses Tags darf nur folgender Tag stehen

<TITLE>: für <HEAD> -, für <TITLE> "Titel"

<BODY> alle anderen Tags sollen innerhalb dieses Tags stehen : -

<h2> innerhalb dieses Tags ist Text : "Text_sehr_gross"

<h3> innerhalb dieses Tags ist Text : "Text_gross"

<h4> innerhalb dieses Tags ist Text : "Text_mittel"

<h5> innerhalb dieses Tags ist Text : "Text_normal"

<BR> Zeilenumbruch soll auch in Ausgabe vollzogen werden: -

<TABLE> Konstruktor für eine Tabelle; für jede Tabelle ist "Tabelle" gefolgt von einem Leerzeichen, der Spaltenzahl, Leerzeichen, Zeilenzahl auszugeben; danach folgt der Inhalt der Zellen formatiert wie oben angegeben. Alle folgenden Tags stehen innerhalb dieses Tags (<TBODY> muss genau ein mal innerhalb dieses Tags stehen): -

<TBODY> die folgenden zwei Tags stehen innerhalb: -

<TR> für neue Zeile: -

<TD> für neue Spalte: -

Weiters gelten folgende Einschränkungen und Hinweise:

Eingabedaten:

Lesen Sie die Stringfolge ein und interpretieren Sie diese entsprechend den Vorgaben. Um die Verarbeitung zu erleichtern werden von der String-Einlesefunktion immer Strings geliefert, die entweder aus Tags oder aus Text bestehen (und nicht beides gemeinsam). Der Eingabedatensatz wird immer mit dem </HTML> Tag abgeschlossen.

Ausgabedaten:

Die Ausgabedaten sind gemäß obenstehender Aufgabenbeschreibung zu auszugeben. Beachten Sie dabei bitte insbesonders den Unterabschnitt "Einschränkungen und Hinweise".

Fehlerbehandlung:

Alle Datensätze sollen immer bis zum Ende eingelesen werden. Bei fehlerhaften Eingabesätzen (fehlerhafte bzw. fehlende Tags, nicht geschlossene Tags) soll ein "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Die maximal zulässige Gesamtlänge errechnet sich aus der Summe der Teillängen der jeweils von der String-Einlesefunktion gelesenen Teilstrings. Bei einer Überschreitung ist mit "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub zu reagieren. Jedenfalls sind die Eingabedaten bis zum Ende des Datensatzes einzulesen.

Beispiele:

Eingabedaten
<HTML> <HEAD> <TITLE> Hallo </TITLE> </HEAD> <BODY> <BR> <h2> Dies ist ein Interpreter </h2> <BR> <h4> kleiner </h4> </BODY> </HTML>

<HTML> <HEAD> <TITLE> Hallo </TITLE> </HEAD> <BODY> <TABLE> <TBODY> <TR> <TD> <h5> Tabelle </h5> </TD> </TR> </TBODY> </TABLE> </BODY> </HTML>

Ausgabedaten
Titel Hallo;
Text_sehr_gross Dies ist ein Interpreter;
Text_mittel kleiner; Ende

Titel Hallo; Tabelle 1 1 Text_normal Tabelle; Ende

Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Main < html.i1 > html.out1

Das erzeugte File html.out1 können Sie dann mit dem mitgelieferten Outputfile html.o1 vergleichen.

Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif