4113 html HTML Parser
Kategorie:Informatik
Klasse:schwer
Eingabe:Siehe Spezifikation
Ausgabe:Siehe Spezifikation
Abzugebende Files: html.txt, Main.java, html/*.java , 4544.txt, 4572.txt

Kurzbeschreibung:

Das Programm soll die gängigsten HTML tags (<head>, <body>,...) interpretieren können und den Input dementsprechend formatieren. Eingeben wird eine String-Folge (max 40), die aus den tags und dem Inhalt bestehen. Es soll auf den Syntax geachtet werden (tags müssen wieder geschlossen werden </head>) und bei fehlerhaftem Syntax eine Fehlermeldung ausgeben.

Allgemeine Hinweise:

Aufgabenbeschreibung

Das Programm soll eine Stringfolge einlesen und die HTML tags interpretieren können. Text soll nicht formatiert werden, es soll nur angegeben werden, in welcher Art er erscheinen würde, also eine kurze Interpretation (<h1> = sehr_gross, <h2> = gross, ..), gefolgt von einem Leerzeichen und dann dem unformatierten Text gefolgt von einem Semicolon und einem Leerzeichen. Bei Tabellen soll angegeben werden, wie viele Spalten und Zeilen sie hat, danach der Text, so formatiert wie oben genannt. Grafiken, style sheets und Scripte sind nicht erlaubt. Tags müssen immer geschlossen werden, also einem <xxxx> folt immmer ein </xxxx>, wobei das letztere das schließende tag ist. Ausnahme ist hier das Tag <BR>, für das es kein schießendes Tag gibt. Abgeschlossen wird mit "Ende". 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 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: -

Eingabedaten:

Lesen Sie die StringFolge ein und interpretieren sie sie nach den Vorgaben. Der Eingabedatensatz wird immer mit dem -Tag abgeschlossen.

MusterEingabe <HTML> <HEAD> <TITLE> Hallo </TITLE> </HEAD> <BODY> <h2> Dies ist ein Interpreter </h2> <BR> <h4> kleiner </h4> <TABLE> <TBODY> <TR> <TD> <h5> Tabelle </h5> </TD> </TR> </TBODY> </TABLE> </BODY> </HTML>

Ausgabe waere:
Titel Hallo; Text_sehr_gross Dies ist ein Interpreter;
Text_mittel kleiner; Tabelle 1 1 Text_mittel Tabelle; Ende

Ausgabedaten:

Wie oben genannt zuerst die Interpretation gefolgt von einem Leerzeichen, dann der Text, gefolgt von einem Semicolon und einem Leerzeichen. Bei Tabellen wird ausgegeben "Tabelle" dann ein Leerzeichen dann die Anzahl der Zeilen, Leerzeichen, dann Anzahl der Spalten. Danach den Inhalt der Spalten wie oben genannt.

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" ausgegeben werden.

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.