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:
-
Das Beispiel dieser Runde ist objektorientiert und als package zu lösen. Nachdem Sie das Programm mittels Dialogprogramm abgegeben haben, gehen Sie zu einem Tutor. Der Tutor überprüft, ob Sie Ihr Programm spezifikationsgemäß programmiert haben.
-
Unmittelbar nach der erfolgreichen Abgabe am Dialogprogramm können sie bereits die nächste Runde abholen.
-
Sie haben Lösungen (und Spezifikationen) aus der 3. Runde von anderen Studenten erhalten. Testen Sie alle mitgelieferten Lösungen und wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Main.java muß aber die Methode main enthalten. Weiters müssen alle anderen abgegebenen Klassenfiles in Verzeichnis html vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.5.0) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
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:
- Die Zeichenfolge zwischen den Zeichen < und > gilt als HTML Tag. Alle nicht explizit aufgelisteten Tags gelten als fehlerhaft.
- Bei der Schreibweise der Tags ist unbedingt auf Groß-/Kleinschreibung zu achten.
- In dieser Spezifikation ist sämtlicher Text immer zwischen umgebenden <h#> angegeben (Ausnahme: <TITLE>). Text ausserhalb von <h#> und </h#> soll ignoriert werden, d. h. es kommt zu keiner Ausgabe (ist kein Fehler).
- Innerhalb des <TITLE> Tags darf keine Formatierung angegeben werden.
- Weder <HEAD> noch <TITLE> Block sind zwingend erforderlich. Ein <HEAD> Bock ohne <TITLE> ist zulässig, ein <TITLE> ohne <HEAD> Block aber nicht.
- Bei der Anzahl der Spalten ist immer die maximale Anzahl von Spalten (über alle Zeilen) anzugeben. Die Anzahl der Zeilen entspricht der Anzahl der <TR> Tags.
<TD> Tags müssen immer in Zeilen (<TR>) stehen, pro <TR> mindestens eine Spalte; die Anzahl der Spalten in den Zeilen kann verschieden sein.
- Tabellen dürfen durchaus öfter vorkommen, allerdings nicht geschachtelt werden.
- Das <BR> Tag kann im <BODY> vorkommen, weiters innerhalb von <TD> Tags sowie innerhalbt der Überschriften Tags.
- Es darf nur ein <BODY> Block im Dokument auftreten, ansonsten ist dies als Fehler zu werten.
- Textformatierungen dürfen nicht ineinander geschachtelt werden.
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.