EBNF kennt sich da jemand aus??



  • Hallo,

    hier mal eine Klausuraufgabe

    Gegeben ist die folgende Grammatik in EBNF:
    
    <number> ::= <integer> | <real>
    <integer> ::= <digit> {<digit>} | <digit> {<hexDigit>} ’H’
    <real> ::= <digit> {<digit>} ’.’ {<digit>} [<ScaleFactor>]
    <ScaleFactor> ::= ’E' [’+’ | ’-’] <digit> {<digit>}
    <hexDigit> ::= <digit> | ’A’ | ’B’ | ’C’ | ’D’ | ’E’ | ’F’
    <digit> ::= ’0’ | ’1’ | ’2’ | ’3’ | ’4’ | ’5’ | ’6’ | ’7’ | ’8’ | ’9’
    
    Die Notation entspricht im wesentlichen der in der Vorlesung gegebenen BNF-Notation, wobei
    zusätzlich gilt: Terminale stehen zwischen ‘ .. ‘, […] kennzeichnen optionale Elemente und {…}
    kennzeichnen Elemente die weggelassen oder beliebig oft wiederholt werden können.
    
    a) Entscheiden Sie ob, die folgenden Worte der Grammatik genügen:
       10AH        Ja     Nein
       A10H        Ja     Nein
       4567E+8     Ja     Nein
    

    bin mir dort absolut nicht sicher wie das genau funktioniert.. 😕

    10AH würde ich sagen, es passt zu integer einordnen würde ich es so

    <digit> {<digit>} | <digit> {<hexDigit>} ’H’
      1                    0        A         H
    

    aber andererseite macht mich das auch irgendwie stuzig, da integer werte eigendlich ganzzahlige werte sind aber keine buchstaben..

    A10H würde ich mit NEIN angeben das es nirgends passt.. 😕



  • eher so, oder?

    <digit> {<digit>} | <digit> {<hexDigit>} ’H’
                           1        0A        H
    


  • NEIN, kpl! schrieb:

    eher so, oder?

    <digit> {<digit>} | <digit> {<hexDigit>} ’H’
                           1        0A        H
    

    Exakt



  • A10H ist kein Wort der Sprache, weil jeder integer mit einem digit anfangen muss, A aber ein hexdigit ist.

    4567E+8 ebenfalls nicht. In
    <real> ::= <digit> {<digit>} ’.’ {<digit>} [<ScaleFactor>]
    kommt immer ein '.' vor der, in dem Wort ist aber keiner.



  • Und nochwas ...

    dddd schrieb:

    10AH würde ich sagen, es passt zu integer einordnen würde ich es so

    <digit> {<digit>} | <digit> {<hexDigit>} ’H’
      1                    0        A         H
    

    aber andererseite macht mich das auch irgendwie stuzig, da integer werte eigendlich ganzzahlige werte sind aber keine buchstaben..

    Die hast bei deiner Ableitung das | ignoriert. So geht das nicht.

    Und dann die "Buchstaben" in dem Integer ... himmelnochmal schonmal was von Hexadezimalsystem gehört?



  • Komische Definition von Hexadezimaldarstellung. Sollte es nicht eher

    <integer> ::= <digit> {<digit>} | <hexDigit> {<hexDigit>} ’H’
    

    heißen?!



  • Th69 schrieb:

    Komische Definition von Hexadezimaldarstellung. Sollte es nicht eher

    <integer> ::= <digit> {<digit>} | <hexDigit> {<hexDigit>} ’H’
    

    heißen?!

    Nein, das ist schon richtig so. Sonst kann man hexadezimale Zahlen nicht von Identifiern unterscheiden (wenn man davon ausgeht, dass das nur ein Ausschnitt aus einer realen Grammatik ist.)



  • Achso, dann ist also A0 oder FF keine Hexadezimalzahl mehr...



  • Du meinst wohl A0H oder FFH. Ja, wenn du mal Assembler (Intel-Syntax) programmierst, wird dir das wieder begegnen.



  • Bashar schrieb:

    Du meinst wohl A0H oder FFH. Ja, wenn du mal Assembler (Intel-Syntax) programmierst, wird dir das wieder begegnen.

    Aha und wie kodiere ich dann bspws. 255 (ff) als hexadezimalzahl mit deinem assembler? 😕



  • @trottelmaschine
    Je nach Assembler als 0xFF, $FF oder FFH.
    Seiner verwendet anscheinend FFH.



  • hustbaer schrieb:

    Seiner verwendet anscheinend FFH.

    Eben. Und FFH waere nach dieser Grammatik eben _keine_ gueltige Zahl. Mehr hat Th69 nicht festgestellt. 🙄



  • Ahhhh 💡 I see.

    Ist aber auch kein Problem. Schreibste halt 0FFH.

    ps: 🙄 retour.


Anmelden zum Antworten