Archiv verlassen und diese Seite im Standarddesign anzeigen : EBNF und Syntaxdiagramme
Hallo ihr Lieben,
ich bin ganz neu hier im Forum und bräuchte dringend Hilfe bei einer Aufgabe die ich leider irgendwie nicht so ganz verstehe.
Da ein Bild dabei ist, hab ich sie mal online gestellt :
http://www.eschgarth.de/Aufgabenblatt7.pdf
Es geht um die Aufgabe 7.1
Dort werden 5 Beispiele arithmetischer Ausdrücke vorgegeben, wobei man bestimmen soll bei welchen keine syntaktische Korrektheit gegeben ist.
Ich bin mir absolut unsicher bei welchen Ausdrücken sich um solche handelt, sie syntaktisch nicht korrekt sind.
Der erste Ausdruck lautet zb einfach 30. Das ist doch absolut korrekt oder nicht ?
Der zweite lautet (20-1)*2 und ist meiner ansicht nach auch korrekt, da durch die Klammern genau definiert ist was zuerst berechnet werden soll.
Bei den weiteren Ausdrücken geht es mir ähnlich.
Der letzte Ausdruck enthält ein "L". Womit ich nicht wirklich etwas anfangen kann.
Habt ihr da vielleicht mehr Ahnung von als ich ?
Wäre super nett, wenn sich das mal jemand ansehen würde.
Gruß Lilian
mehlvogel
04-01-2007, 18:29
Es geht nicht danach, was berechnet werden kann, sondern was nach der gegebenen Grammatik gültig ist, der Sinn ist dabei erstmal zweitrangig. Da Klammern beispielsweise nicht möglich sind, kann (20-1) * 2 nicht abgeleitet werden. Du musst schauen, dass du für "Expressions" eine Ableitung findest, so dass dein Ausdruck herauskommt. Beim ersten ist das ganz einfach:
Expressions -> IntegerLiteral -> Digits -> Digits Digit -> Digit Digit -> 3 0
Vielleicht bekommst du jetzt die anderen Ausdrücke auch hin.
Vielen Dank für deine hilfreiche Antwort mehlvogel !
Ich habe versucht deine Lösung nachzuvollziehen und somit die nächten zu lösen.
Ist das so korrekt ? :
2 – 7 + 8 =
Expressions -> IntegerLiteral -> Digits -> Digit -> 2 -> InfixOp-> - -> Expressions -> IntegerLiteral -> Digits -> Digit -> 7 -> InfixOp-> + -> Expressions -> IntegerLiteral -> Digits -> Digit -> 8
oder das ? :
-50 = InfixOp -> - -> Expression -> IntergerLiteral -> Digits -> Digits Digit -> Digit Digit -> 5 0
mehlvogel
04-01-2007, 19:13
Ich hätte es anders aufgeschrieben, aber der Gedanke ist richtig. Hätte es so geschrieben:
Expressions -> IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral -> Digits - Digits + Digits -> Digit - Digit + Digit -> 2 - 7 + 8
Verstehe ! *freu*
Habe nun versucht nach deinem Schema die letzte der 5 Aufgaben zu lösen :
2 % 5 + 9 /L 3L =
Expressions -> IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral IntegerLiteral IntegerLiteral -> Digits % Digits + Digits / IntegerTypeSuffix -> Digits -> IntegerTypeSuffix -> Digit % Digit + Digit / L Digit L -> 2 % 5 + 9 / L 3L
Meinst du, das ist so richtig ?
mehlvogel
04-01-2007, 19:37
Nein. Der erste Ableitungsschritt ist falsch. Die Regel lautet:
Expressions ==> IntegerLiteral { InfixOp IntegerLiteral }
Das in den geschweiften Klammern darf beliebig oft wiederholt werden, aber es dürfen nicht einzelne Teile dessen weggelassen werden. Gültige Ableitunten wären bspw.
Expressions -> IntegerLiteral (Das in den geschweiften Klammern wird weggelassen)
Expressions -> IntegerLiteral InfixOp IntegerLiteral (Einmal)
Expressions -> IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral
Expressions -> IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral InfixOp IntegerLiteral
... usw
Ich denke das letzte lässt sich nicht ableiten.
hmpf das verstehe ich jetzt leider nicht so richtig ..
Habe ich es denn nicht genauso in der ersten Ableitung gemacht ?
Expression -> IntegerLiteral InfixOp IntergerLiteral InfixOp IntergerLiteral InfixOp IntergerLiteral InfixOp IntergerLiteral InfixOp IntergerLiteral
Ich dachte jeder Zahl ist zunächst ein IntegerLiteral zuzuordnen und jedem Operator ein InfixOp. Das macht mir nu bissl sorgen ;(
mehlvogel
04-01-2007, 19:59
Oh ich glaube dann hast du dich vertippt in deinem Posting oben. Dann ist aber deine zweite Ableitung falsch. Dort leitest du
IntegerLiteral -> IntegerTypeSuffix
ab. Die Regel ist allerdings:
IntegerLiteral ==> Digits [ IntegerTypeSuffix ]
d.h. das IntegerTypeSuffix kann weggelassen werden, allerdings muss immer "Digits" enthalten sein. Es gitb für IntegerLiteral also nur zwei gültige Ableitungen:
IntegerLiteral -> Digits
IntegerLiteral -> Digits IntegerTypeSuffix
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.