pdf - Programmierkurs Java

Werbung
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.
Herunterladen