EBNF und LL(*)-Grammatik < Formale Sprachen < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | Expr:: = Number OP Number OP Number
Number:: = (0..1)
OP:: = || | && | == | < | <= | + | - | * | /
Die Grammatik soll so geändert werden das Prioritäten und die Auswertung von links nach rechts berücksichtigt wird.
Dabei sind die Prioritätsstufen in absteigender Reihenfolge:
-Unäre Operatoren: - und !
-Multiplikative Operatoren: * und /
- Additive Operatoren: + und –
- Relationale Operatoren: ==, <= und <
- Konjunktion: &&
- Disjunktion: || |
Guten Tag,
ich habe leider keine Idee wie ich bei dieser Aufgabe überhaupt anfangen soll.
Meine erste Idee war für jeden Operator eine Expression zu schreiben und die Operator sind dabei geschachtelt, der Operator mit der niedrigsten Reihenfolge ist ganz oben in der Schachtelung. Die Idee hat aber zu keinen Erfolgt geführt.
PS: Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:06 So 09.12.2012 | Autor: | felixf |
Moin!
> Expr:: = Number OP Number OP Number
> Number:: = (0..1)
> OP:: = || | && | == | < | <= | + | - | * | /
>
> Die Grammatik soll so geändert werden das Prioritäten und
> die Auswertung von links nach rechts berücksichtigt wird.
>
> Dabei sind die Prioritätsstufen in absteigender
> Reihenfolge:
> -Unäre Operatoren: - und !
> -Multiplikative Operatoren: * und /
> - Additive Operatoren: + und –
> - Relationale Operatoren: ==, <= und <
> - Konjunktion: &&
> - Disjunktion: ||
> Guten Tag,
> ich habe leider keine Idee wie ich bei dieser Aufgabe
> überhaupt anfangen soll.
> Meine erste Idee war für jeden Operator eine Expression
> zu schreiben und die Operator sind dabei geschachtelt, der
> Operator mit der niedrigsten Reihenfolge ist ganz oben in
> der Schachtelung. Die Idee hat aber zu keinen Erfolgt
> geführt.
Ist aber schon ein guter Ansatz. Mach das jetzt mit Expression fuer jede Operatorgruppe mit der gleichen Prioritaet. Dann sollte es gehen.
Wenn nicht, schreib doch mal explizit auf was du hast, damit wir das besser kommentieren koennen.
LG Felix
|
|
|
|
|
Hallo Felix, hier ist meine Idee, ich habe aber das Gefühl das die OP Reihenfolge hier nicht richtig bearbeitet wird wird:
UnaereOp : MultiOp ( ('-' | '!') MultiOp)*
MultiOp : AddOp ( ('*' | '/') AddOp)*
AddOp : RealaOp ( ('+' | '-' ) RealaOp)*
RealaOp : KonOp ( ('==' | '<=' | '>=' ) KonOp)*
KonOp : DisOp ( '&&' DisOp)*
DisOp : Atom ( '||' Atom)*
Atom : Number | UneareOp
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:00 Di 11.12.2012 | Autor: | felixf |
Moin!
> Hallo Felix, hier ist meine Idee, ich habe aber das Gefühl
> das die OP Reihenfolge hier nicht richtig bearbeitet wird
> wird:
Da hast du Recht.
Deine Grammatik macht aber noch anderen Unsinn, z.B. akzeptiert sie "1!2".
> UnaereOp : MultiOp ( ('-' | '!') MultiOp)*
> MultiOp : AddOp ( ('*' | '/') AddOp)*
> AddOp : RealaOp ( ('+' | '-' ) RealaOp)*
> RealaOp : KonOp ( ('==' | '<=' | '>=' ) KonOp)*
> KonOp : DisOp ( '&&' DisOp)*
> DisOp : Atom ( '||' Atom)*
> Atom : Number | UneareOp
Womit faengt man denn an? Also was ist Expr?
Und warum kommt bei Atom "UnaereOp" vor? Allgemein scheint mir die Reihenfolge genau falsch herum.
LG Felix
|
|
|
|