Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE3-Syntaxdiagramme (Stand 05.11.2010) Aufgabe 1: Entwickeln Sie Regeln zur Übersetzung von EBNF in Syntaxdiagramme. Aufgabe 2: Eine Zahl ist entweder eine positive Zahl oder ein Minuszeichen gefolgt von einer positiven Zahl oder das Zeichen Null. Eine positive Zahl ist eine Ziffer außer Null gefolgt von einer optionalen Ziffernfolge. Eine optionale Ziffernfolge ist eine Ziffer gefolgt von einer optionalen Ziffernfolge oder leer. (a) Überführen Sie die Aussage in eine BNF (b) Überführen Sie diese Aussage in eine EBNF Aufgabe 3: Gegeben sei folgende EBNF für Gleitkomma-Literale in Java: <FloatPointLit> ::= <Digits> ‘.’ [<Digits>] [<ExpPart>] [<FloatTypeSuffix>] | ‘.’ <Digits> [<ExpPart>] [<FloatTypeSuffix>] | <Digits> <ExpPart> [<FloatTypeSuffix>] | <Digits> [<ExpPart>] <FloatTypeSuffix> <Digits> ::= <Digit> {<Digits>} <Digit> ::= ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ <ExpPart> ::= <ExpIndicator> <SignedInteger> <ExpIndicator> ::= ‘e’ | ‘E’ <SignedInteger> ::= [<Sign>] <Digits> <Sign> ::= ‘+’ | ‘-’ <FloatTypeSuffix> ::= ‘f’ | ‘F’ | ‘d’ | ‘D’ [...] bedeutet: Symbole oder Symbolfolgen innerhalb der Klammern können auch weggelassen werden {...} bedeutet: Symbole oder Symbolfolgen innerhalb der Klammern können beliebig oft wiederholt oder auch ganz weggelassen werden ...|... bedeutet: genau ein alternatives Symbol oder eine alternative Symbolfolge innerhalb der Klammern muss auftreten <Zeichenfolge>: Nichtterminal ‘Zeichenfolge’: Terminal Teilaufgabe (a): Formen Sie die obige EBNF in ein äquivalentes Syntaxdiagramm um! Teilaufgabe (b): Welche der folgenden Zeichenketten sind bezüglich der obigen EBNF syntaktisch korrekt, welche nicht (Begründen Sie Ihre Entscheidung!): 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 4711.08155e23D 0815.f .ef +4.5 3456.7<ExpPart>F 6.4E-23f 78.2f 78g.2f 99999999999.99999999e+99999999999999 6767.7676.7e56 Aufgabe 4: Entwickeln Sie ein Syntaxdiagramm (bzw. alternativ eine EBNF) für EBNF-Regeln (d.h. beschreiben Sie, wie EBNF-Regeln syntaktisch aufgebaut sind)! Aufgabe 5: Gegeben sei folgende EBNF: <Start> ::= <Digits> ‘.’ [<sVocal>] <bVocal> | ‘.’ <Digits> {<bVocal>} | <sVocal> {<bVocal>} <Digit> <Digits> ::= <Digit> {<Digit>} <Digit> ::= ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ <sVocal> ::= ‘a’ | ‘e’ | ‘i’ | ‘o’ | ‘u’ <bVocal> ::= ‘A’ | ‘E’ | ‘I’ | ‘O’ | ‘U’ 1. 2. 3. 4. 5. 6. 4711.E .AE i56 88.eeAA eAEE7 815+aA Aufgabe 6: Entwickeln Sie ein Syntaxdiagramm (bzw. alternativ eine EBNF) für die Sprache L = {(a2b)n(a2b)m | n, m sind natürliche Zahlen oder Null} Aufgabe 7: Gegeben sei folgende EBNF: <InterfaceDecl> ::= <InterfaceMod> <Identifier> <InterfaceBody> <InterfaceMemD> <Letter> <Digit> ::= ::= ::= ::= ::= ::= 1. 2. 3. 4. 5. 6. [ <InterfaceMod> ] 'interface' <Identifier> [ 'extends' <Identifier> { ',' <Identifier> } ] ( <InterfaceBody> | ';' ) ( 'public' | 'protected' | 'private' ) <Letter> { ( <Letter> | <Digit> ) } '{' { <InterfaceMemD> } '}' ( 'method' | 'constant' | 'class' ) ( 'a' | 'b' | '$' ) ( '0' | '1' ) interface ab1a1a1; public interface aaa extends bbb, ab$ { method method } protected interface 0$ab extends aaa method constant interface aaa, bbb extends aaa, bbb { aaa } InterfaceMod interface extends Identifier ; private public interface extends aaa , { class extends bbb } Aufgabe 8: Ist es möglich, ein Syntaxdiagramm (bzw. alternativ eine EBNF) für die Sprache L = {(and2bmc3)p | n, m sind natürliche Zahlen oder Null, p ist natürliche Zahl größer Null} zu entwickeln? Aufgabe 9: Gegeben sei folgendes Syntaxdiagramm: 3 zahl 2 a a b a 1 5 4 b 2 a 7 Welche der folgenden Zeichenketten sind syntaktisch korrekt, welche nicht: 12451333 12459333 12a3 145245 2217 454545221452127 123453 4545217 Begründen Sie Ihre Antwort! Aufgabe 10 Entwickeln Sie eine EBNF für die Sprache L = {x2ynzm(cd)3 | n, m sind natürliche Zahlen oder Null} Aufgabe 11: Ist es möglich für folgende Sprache L eine EBNF zu entwickeln? L = {(xnym)p | n, m, p sind natürliche Zahlen größer oder gleich Null} Aufgabe 12: Ist es möglich für folgende Sprache L eine EBNF zu entwickeln? L = {anbncn | n ist natürliche Zahl oder Null} Aufgabe 13: Die Menge Q der Brüche besteht aus allen Worten, die aus einer ganzen Zahl, gefolgt von einem Schrägstrich (/) und einer ganzen Zahl ungleich 0 bestehen. Geben Sie eine EBNF für die Menge Q an. Aufgabe 14: Gegeben sei die folgende Grammatik in EBNF (die Syntax entspricht übrigens in etwa der Syntax der funktionalen Programmiersprache Scheme): <Ausdruck> <Atom> <Liste> <Ausdruck-Folge> <Zahl> <Ziffer> <Zeichenkette> <Zeichen> ::= ::= ::= ::= ::= ::= ::= ::= <Atom> | <Liste> <Zahl> | <Zeichenkette> ‚(‘ <Ausdruck-Folge> ‚)‘ <Ausdruck> <Ausdruck-Folge> | <Ziffer> { <Ziffer> } ‚0‘ | ‚1‘ | ‚2‘ | ‚3‘ | ‚4‘ <Zeichen> <Zeichenkette> | ‚i‘ | ‚f‘ | ‚/‘ | ‚+‘ | ‚=‘ | ‚a‘ Welche der folgenden Sätze/Programme sind korrekt, welche nicht! Begründen Sie Ihre Entscheidung! (1) (2) (3) (4) (5) (6) (7) (/ 22 (+ 41 3)) (if (= a 0) 0 (/ 1 a)) (+ 41 3) (+ 3 41) (/ 1 2 3 (4 3 (* 2 1) (* 2.3 4.6) (+ Ziffer Zeichenkette) (fifi (iffi iffi) ifif) Aufgabe 15: Die Sprache Mini-Pascal (aus dem Buch "Vom Problem zum Programm" von Herbert Klaeren, erschienen beim Teubner Verlag) ist in etwa durch die folgende EBNF definiert: <program> <block> <vardecl> <statement> := := := := <condition> <expr> <term> <factor> <ident> <number> <letter> <digit> := := := := := := := := "program" <ident> ";" <block> ".". [<vardecl>] "begin" <statement> {";" <statement>} "end". "var" <ident> {"," <ident>} ":" "Integer" ";". <ident> ":=" <expr> | "begin" <statement> {";" <statement>} "end" | "if" <condition> "then" <statement> | "while" <condition> "do" <statement> | "read" <ident> | "write" <ident>. <expr> ("=" | "<>" | "<" | ">" | "<=" | ">=") <expr>. <term> {("+" | "−") <term>}. <factor> {("*" | "/") <factor>}. <ident> | <number> | "(" expr ")". <letter> {<letter>} <digit> {<digit>} "a" | "b" | "c" "0" | "1" Konstruieren Sie syntaktisch korrekte Mini-Pascal-Programme.