• Keine Ergebnisse gefunden

Grammatiken Serie5

N/A
N/A
Protected

Academic year: 2021

Aktie "Grammatiken Serie5"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungen zur Vorlesung¨

”Grundlagen der Informatik 1“

Studiengang E-Technik WS 2001/02

AG Betriebssysteme, FB 3 Jan Bredereke ausgegeben: 11.1.2002 Abgabe und Besprechung:

in der ¨Ubung am 17.1.2002

Serie 5

Grammatiken

Aufgabe 1: Syntax¨ uberpr¨ ufung f¨ ur Taschenrechner mit polnischer Notation

Die polnische Notation (PN) ist eine Schreibweise f¨ur mathematische Terme, die z.B. von manchen Taschenrechnern als Eingabeform verwendet wird. Der Verkn¨upfungsoperator steht dabei immer vorne, und es folgen die zu verkn¨upfenden Zahlen oder Ausdr¨ucke danach. Um die Terme leichter lesbar zu machen, verwenden wir Klammern. Den mathematischen Term

”4 + 82“ schreibt man z.B. als

”+(4,-(8,2))“.

Schreibt ein C-Programm, welches vollst¨andig geklammerte mathematische Terme, gegeben in PN, auf ihre syntaktische Korrektheit bez¨uglich der unten angegebenen Grammatik ¨uberpr¨uft.

Euer Programm soll den zu ¨uberpr¨ufenden Ausdruck als eine Kommandozeilenparameter- Zeichenkette ¨ubergeben bekommen, d. h. es soll sp¨ater z.B. in der Form

SynCheck "+(4,-(8,2))"

aufgerufen werden. Der zu pr¨ufende String befindet sich dann in dem ersten Element desargv- Parameters dermain()-Funktion Eures Programms. Als Ergebnis soll auf dem Bildschirm nur ausgegeben werden, ob es sich bei einem Ausdruck um einen korrektenTERMhandelt oder nicht;

es soll dabei nicht auch noch das Ergebnis eines ¨ubergebenen Ausdrucks berechnet werden.

a) Lexikalische Grammatik

Die Ausdr¨ucke sollen aus positiven Zahlen inklusive der 0, den mathematischen Grundopera- tionen +,-,*,/, runden Klammern () sowie Kommas zusammengesetzt sein. Daraus ergibt sich f¨ur die Token-Definitionen die folgende lexikalische Grammatik:

binop = + | / | * minop = -

lb = ( rb = ) komma = ,

num = 0 | 1 | 2 | 3 | ... | 10 | 11 | ...

NUM soll dabei den nat¨urlichen Zahlen inklusive 0 entsprechen. Der Einfachheit halber sind auch Zahlen mit f¨uhrenden Nullen zugelassen.

Schreibt zun¨achst ein ProgrammlexCheck, das pr¨uft, ob der Eingabestring ausschließlich aus zul¨assigen Token besteht.

(2)

Definiert hierzu einen Aufz¨ahlungstyp (”enum“), der Namen f¨ur alle zul¨assigen Token enth¨alt, sowie die Namenunbekannt und string ende. Schreibt dann eine Funktion getToken(), die zur aktuellen Stelle im Eingabestring den Namen des zugeh¨origen Tokens liefert, und die die aktuelle Stelle entsprechend nach hinten verschiebt. Schreibt schließlich eine Hauptfunktion main(), diegetToken()so lange aufruft, bis entweder das Stringende oder ein Fehler gefunden wurde.

Testet das Programm mit einigen Eingaben.

b) Syntaktische Grammatik

Aufbauend auf der lexikalischen Grammatik besteht die PN-Grammatik aus f¨unf Regeln:

TERM = BINTERM

| MINTERM

| num

BINTERM = binop ARGS MINTERM = minop MINREST MINREST = ARGS

| num

ARGS = lb TERM komma TERM rb

Schreibt ein Programm synCheck, daß seine Eingabe auf korrekte PN-Syntax ¨uberpr¨uft. Ver- wendet dazu die Funktion getToken() aus der vorigen Teilaufgabe. Zus¨atzlich ben¨otigt Ihr nun eine FunktionputToken, die im Eingabestring wieder zur Position vor dem letzten Aufruf von getToken() zur¨uckgeht. (putToken() wird nie mehr als einmal aufgerufen, ohne daß ein neuer Aufruf von getToken() folgt.)

Schreibt f¨ur jede Regel der obigen PN-Grammatik eine eigene Funktion zur ¨Uberpr¨ufung.

Dadurch spiegelt sich die rekursive Natur der Grammatikregeln direkt in einer entsprechenden Aufrufstruktur Eurer Funktionen wieder.

Zeigt anhand geeigneter Testf¨alle, daß Euer Programm korrekte und fehlerhafte PN–Terme unterscheiden kann.

2

Referenzen

ÄHNLICHE DOKUMENTE

1 Dem Bernjurassischen Rat stehen jährlich ein Teil der Einnahmen des Lotteriefonds sowie ein Teil der Einnahmen des Sportfonds, die jeweils dem Bevölkerungsanteil des

Lies die unvollständigen Sätze unten durch und fülle in die Lücken ein passendes Wort.. Verwende dazu folgende Wörter: hinter, vor, auf, unter, am, im, bei,

[r]

public static void main(String[] argv) { Socket socket;.

Einen hohen Glykämischen Index (von 100 bis 70) weisen Baguette und Cornflakes, Waffeln, Weißbrot und Kräcker auf; auch Pommes Frites und Kartoffelpüree stehen ganz oben auf

Sorgen Sie am besten auch während der Arbeit für Bewegung: Übermitteln Sie öfters eine Nachricht persönlich, statt eine E-Mail zu schreiben.. Haben

Hierzu wird auf die Bestimmungen des Buß- und Verwarngeldkataloges Binnen- und Seeschifffahrt (BVKatBin-See) vom 1. 67) geändert worden ist, in der jeweils geltenden

Beamte und Beamtinnen des Polizeivollzugsdienstes mit einer in Ziffer II aufgeführten Amtsbezeichnung werden ermächtigt, wegen geringfügiger Ordnungswidrigkeiten nach § 56 in