Results 1 to 60 of 60
  1. #1
    itachi's Avatar
    Title
    Elite
    Join Date
    Nov 2006
    Posts
    319
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts

    4. Beispiel - Parser

    Hi, ich hab eine Frage zur angegebenen Grammatik .. kann das sein dass die bissl falsch ist?
    zb:

    Code:
    Pars : { id ',' } [id]
    Macht irgendwie keinen Sinn. Damit wären folgende Ausdrücke erlaubt:
    Code:
    id    // korrekt
    id , id // korrekt 
    jedoch aber auch sowas:
    id ,     // sinnlos, zb. in die funktionsdefinition eingesetzt
    
    func RoflCopter ( lol, rofl , ) end
    Das wär irgendwie von der Syntax komisch, einen Beistrich ohne Argument zu erlauben (ähnlichkeit mit da Assembler syntax mov foo(,%rdi,8))
    Weis da wär was ?
    Our Country is a peace loving democracy....
    OF course it is ...PWNED.
    http://blog.metal-hammer.de/wp-conte...presidency.jpg

  2. #2
    Plantschkuh!'s Avatar
    Title
    Dipl.Ing
    Join Date
    Jun 2003
    Location
    mal hier, mal da
    Posts
    2,581
    Thanks Thanks Given 
    365
    Thanks Thanks Received 
    496
    Thanked in
    323 Posts
    1. Sowas ist in der Newsgroup ziemlich sicher besser aufgehoben, weil dort die Verantwortlichen tatsächlich mitmachen.
    2. Die Sache mit dem trailing comma war schon immer so (hab grad in meinen Unterlagen von 2003 nachgekramt) und ist also wohl Absicht.
    3. Fürs trailing comma spricht, daß solche Listen (einen Hauch) einfacher zu generieren sind. In C ist es stellenweise auch erlaubt:
    Code:
    enum { A, B, C, };
    *plantsch*

  3. #3
    itachi's Avatar
    Title
    Elite
    Join Date
    Nov 2006
    Posts
    319
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    Also kein Crap der da in da Angabe ist. Ist mir nur sehr seltsam vorgekommen.
    genauso wie folgende Lexeme erlaubt sein sollen:

    "*" , "-" , "+", "*" .. schätze mal das Letzte is ziemlich sicher ein "/", und ned 2tes mal *.
    Jo, ok guck ich mal in die Newsgroup.
    Our Country is a peace loving democracy....
    OF course it is ...PWNED.
    http://blog.metal-hammer.de/wp-conte...presidency.jpg

  4. #4

    Title
    Elite
    Join Date
    Oct 2005
    Posts
    354
    Thanks Thanks Given 
    1
    Thanks Thanks Received 
    10
    Thanked in
    5 Posts
    falls wer das parser-bsp macht und eine testdatei braucht.. ich glaube die sollte fürs erste mal (grob) alles abdecken, werd meine tests nach der veröffentlichung der instituts-tests ausbauen. aber zum starten sollten die reichen. und ja, wenn wer meint dass da irgendwo ein fehler versteckt sein sollte... mein parser ist für kritik offen
    Attached Files Attached Files

  5. The Following 6 Users Say Thank You to onu For This Useful Post:


  6. #5
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by itachi View Post
    Also kein Crap der da in da Angabe ist. Ist mir nur sehr seltsam vorgekommen.
    genauso wie folgende Lexeme erlaubt sein sollen:

    "*" , "-" , "+", "*" .. schätze mal das Letzte is ziemlich sicher ein "/", und ned 2tes mal *.
    Jo, ok guck ich mal in die Newsgroup.
    Glaube ichn nicht, da "/" in der Grammatik gar nicht vorkommt.

  7. #6
    itachi's Avatar
    Title
    Elite
    Join Date
    Nov 2006
    Posts
    319
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    Jo, stimmt hab ich mir nachher auch gedacht. Wär wohl die Frage ..was denn nun?
    Hat irgendjemand diese Angaben korrekturgelesen bevor die rausgekommen sind?
    Hab langsam den Eindruck, dass das ned passiert ist.
    Our Country is a peace loving democracy....
    OF course it is ...PWNED.
    http://blog.metal-hammer.de/wp-conte...presidency.jpg

  8. #7
    Aeroflare's Avatar
    Title
    Baccalaureus
    Join Date
    Jan 2005
    Posts
    541
    Thanks Thanks Given 
    13
    Thanks Thanks Received 
    49
    Thanked in
    34 Posts
    @onu
    Warum nimmst du an, dass eine Expression auch ein einfacher Term sein könnte? Ich kann das aus der Angabe nicht wirklich rauslesen...

    Ich hab auch extra das trailing comma nicht implementiert (auch wenn's 2-3 Zeilen mehr sind...) ich empfind das einfach als unkorrekt
    There's a place in the dark where the animals go
    you can take off your skin in the cannibal glow
    Juliet loves a beat and the lust it commands
    drop the dagger and lather the blood on your hands - Romeo

  9. #8

    Title
    Elite
    Join Date
    Oct 2005
    Posts
    354
    Thanks Thanks Given 
    1
    Thanks Thanks Received 
    10
    Thanked in
    5 Posts
    Code:
    Expr: ....
        | Term { ’+’ Term }
    der letzte teil ist optional, somit kann Expr auch ein einfacher Term sein.

    und wegen dem trailing comma hat plantschkuh eigentlich eine schöne erklärung geliefert?! aber testen würd ichs auf jeden fall, nicht dass es dann an sowas scheitert

  10. #9
    Aeroflare's Avatar
    Title
    Baccalaureus
    Join Date
    Jan 2005
    Posts
    541
    Thanks Thanks Given 
    13
    Thanks Thanks Received 
    49
    Thanked in
    34 Posts
    Da hast du Recht
    There's a place in the dark where the animals go
    you can take off your skin in the cannibal glow
    Juliet loves a beat and the lust it commands
    drop the dagger and lather the blood on your hands - Romeo

  11. #10
    raven-worx's Avatar
    Title
    Elite
    Join Date
    Feb 2005
    Location
    Tulln an der Donau
    Posts
    403
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    hi,

    gibts irgendeine regel bzw. anleitung an die man sich halten kann... um conflicts zu beseitigen? Habe noch 4 reduce/reduce conflicts und ein blick in die parser.output hilft mir auch nicht wirklich weiter (auch wenn es "human-readable" ist ):

    Code:
    state 29
    
       26 Expr: Term .
       27     | Term . '>' Term
       28     | Term . '=' Term
       29     | Term . AddTerm
       30     | Term . MultTerm
       31     | Term . AndTerm
    
        AND  shift, and go to state 45
        '*'  shift, and go to state 46
        '>'  shift, and go to state 47
        '='  shift, and go to state 48
        '+'  shift, and go to state 49
    
        THEN      reduce using rule 26 (Expr)
        THEN      [reduce using rule 33 (AddTerm)]
        THEN      [reduce using rule 35 (MultTerm)]
        THEN      [reduce using rule 37 (AndTerm)]
        ';'       reduce using rule 26 (Expr)
        ';'       [reduce using rule 33 (AddTerm)]
        ';'       [reduce using rule 35 (MultTerm)]
        ';'       [reduce using rule 37 (AndTerm)]
        ')'       reduce using rule 26 (Expr)
        ')'       [reduce using rule 33 (AddTerm)]
        ')'       [reduce using rule 35 (MultTerm)]
        ')'       [reduce using rule 37 (AndTerm)]
        ','       reduce using rule 26 (Expr)
        ','       [reduce using rule 33 (AddTerm)]
        ','       [reduce using rule 35 (MultTerm)]
        ','       [reduce using rule 37 (AndTerm)]
        $default  reduce using rule 26 (Expr)
    
        AddTerm   go to state 50
        MultTerm  go to state 51
        AndTerm   go to state 52
    mfg

  12. #11
    viper's Avatar
    Title
    Hero
    Join Date
    Mar 2005
    Location
    Wien
    Posts
    203
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    16
    Thanked in
    11 Posts
    Kann es sein, dass du AddTerm usw. auf /* empty */ oder auf Term ableitest? Der Parsergenerator weiß dann nicht, ob z.B. die Expression "2" ein Term, ein (Term )AddTerm oder ein (Term )MultTerm ist.
    In der Regel treten Konflikte bei Mehrdeutigkeiten in der Grammatik auf, diese sollte man suchen / sich überlegen.
    100% trivial

  13. #12
    raven-worx's Avatar
    Title
    Elite
    Join Date
    Feb 2005
    Location
    Tulln an der Donau
    Posts
    403
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    ok.. danke. habs jetzt denke ich.

    was mir aber dabei aufgefallen ist, dass laut angabe folgendes ebenfalls erlaubt ist:
    (1+1)+(not 1)

    macht das irgendeinen sinn den ich gerade nicht erkenne?

    mfg

  14. #13
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by raven-worx View Post
    ok.. danke. habs jetzt denke ich.

    was mir aber dabei aufgefallen ist, dass laut angabe folgendes ebenfalls erlaubt ist:
    (1+1)+(not 1)

    macht das irgendeinen sinn den ich gerade nicht erkenne?

    mfg
    Es gibt auch andere Programmiersprachen, in denen solche Terme gültig sind. Z.B. in C ist das Äquivalent dazu (1+1) + (!1) , und ist kompilierbar.

    edit: Ich möchte anmerken, dass (1+1) + (not 1) in ublu und (1+1) +(!1) in C nicht dieselbe Semantik haben. ! gibt für jede Zahl ungleich 0 0 , und für 0 1 zurück in C, d.h. z.B. !!1110 ist 1. not in ublu hingegen führt Bitweise die Negation einer Zahl aus, d.h. z.B. not 1 ist -2.
    Last edited by 12er; 03-04-2009 at 15:21.

  15. #14
    weixi's Avatar
    Title
    Master
    Join Date
    Nov 2005
    Location
    Posts
    162
    Thanks Thanks Given 
    17
    Thanks Thanks Received 
    8
    Thanked in
    5 Posts
    Code:
    func fun ( ) end
    func fun() end
    Mal ne Frage... beide dieser Funktionsdefinitionen sollten erfolgreich geparsed werden oder?

  16. #15
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by weixi View Post
    Code:
    func fun ( ) end
    func fun() end
    Mal ne Frage... beide dieser Funktionsdefinitionen sollten erfolgreich geparsed werden oder?
    jep , ein testprogramm, dass erfolgreich geparsed werden kann, könnte z.B. so aussehen:

    Code:
    func fun ( )
    end;
    
    func fun()
    end;
    
    func blubber( a , b,c )
        d <- a + (b * c);
        return d;
    end;
    edit: habe die letzte funktion um einen identifyer ergänzt, den ich vergessen habe
    Last edited by 12er; 05-04-2009 at 14:53.

  17. #16
    weixi's Avatar
    Title
    Master
    Join Date
    Nov 2005
    Location
    Posts
    162
    Thanks Thanks Given 
    17
    Thanks Thanks Received 
    8
    Thanked in
    5 Posts
    Siehst.. hatte ganz drauf vergessen. Semikolon am Ende der Funcdef ist obligatorisch.

  18. #17
    viper's Avatar
    Title
    Hero
    Join Date
    Mar 2005
    Location
    Wien
    Posts
    203
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    16
    Thanked in
    11 Posts
    Quote Originally Posted by 12axing View Post
    ! gibt für jede Zahl ungleich 0 0 , und für 0 1 zurück in C, d.h. z.B. !!1110 ist 1. not in ublu hingegen führt Bitweise die Negation einer Zahl aus, d.h. z.B. not 1 ist -2.
    Das kann man in C mit dem ~-Operator erzielen.
    100% trivial

  19. #18
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by weixi View Post
    Siehst.. hatte ganz drauf vergessen. Semikolon am Ende der Funcdef ist obligatorisch.
    Genau .

  20. #19

    Title
    Master
    Join Date
    Nov 2006
    Posts
    130
    Thanks Thanks Given 
    1
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts
    Code:
    func fun ( )
    end;
    
    func fun()
    end;
    
    func ( a , b,c )
        d <- a + (b * c);
        return d;
    end;
    Meines Erachtens ist die letze Funktionsdefinition falsch, da nach dem Keyword "func" ein Identifier kommen muss

  21. #20
    onuris's Avatar
    Title
    Master
    Join Date
    Mar 2007
    Location
    u2 endstation
    Posts
    125
    Thanks Thanks Given 
    4
    Thanks Thanks Received 
    1
    Thanked in
    1 Post
    Die Angabe besagt: Schreiben Sie einen Parser für diese Sprache mit flex und yacc/bison. Die Lexeme sind die gleichen wie im Scanner-Beispiel (id steht für einen Identifier, num für eine Zahl). Das Startsymbol ist Program.

    Es heißt ja num für eine Zahl, kann das auch eine hex-Zahl sein?

  22. #21
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by qndi View Post
    Meines Erachtens ist die letze Funktionsdefinition falsch, da nach dem Keyword "func" ein Identifier kommen muss
    ups , ja, da hast du recht, ich habe den Identifyer vergessen. Thx für den Hinweis, ich verbessere meinen Post.

  23. #22
    Vench's Avatar
    Title
    Hero
    Join Date
    Oct 2004
    Location
    23.
    Posts
    224
    Thanks Thanks Given 
    1
    Thanks Thanks Received 
    1
    Thanked in
    1 Post

    Fehlermeldung

    Hi!

    Sagt vielleicht irgendjemandem diese Meldung was?
    Code:
    gcc -Wall -c lex.yy.c
    lex.yy.c:1213: warning: âyyunputâ defined but not used
    gcc -Wall -o -l parser.tab.o lex.yy.o
    lex.yy.o: In function `yylex':
    lex.yy.c:(.text+0x583): undefined reference to `yywrap'
    lex.yy.o: In function `input':
    lex.yy.c:(.text+0x10b3): undefined reference to `yywrap'
    collect2: ld returned 1 exit status
    make: *** [all] Error 1
    Ich hab grad keine Ahnung wie ich den oder die Fehler finden/beheben könnte

  24. #23
    Paulchen's Avatar
    Title
    Super Moderator
    Join Date
    Oct 2004
    Location
    /home/paulchen
    Posts
    8,086
    Thanks Thanks Given 
    1,967
    Thanks Thanks Received 
    1,455
    Thanked in
    994 Posts
    Probier mal statt
    Code:
    gcc -Wall -o -l parser.tab.o lex.yy.o
    Folgendes:
    Code:
    gcc -Wall -o parser parser.tab.o lex.yy.o -lfl
    Nach -o kommt der Name der Ausgabedatei, ich glaub nicht, dass die Datei "-l" heißen soll. Und -lfl heißt, der Linker soll die flex-Library dazulinken. Das musst du aber ganz ans Ende des gcc-Aufrufs schreiben.

  25. The Following User Says Thank You to Paulchen For This Useful Post:


  26. #24
    Vench's Avatar
    Title
    Hero
    Join Date
    Oct 2004
    Location
    23.
    Posts
    224
    Thanks Thanks Given 
    1
    Thanks Thanks Received 
    1
    Thanked in
    1 Post
    klar solls nicht -l heissen
    danke!!
    ich sollt schlafen gehen...

  27. #25

    Title
    Principal
    Join Date
    Oct 2007
    Posts
    86
    Thanks Thanks Given 
    29
    Thanks Thanks Received 
    61
    Thanked in
    21 Posts
    Schön langsam verzweifle ich am Parser.. Ich sitze nun seit Stunden an einem shift/reduce und bekomme ihn einfach nicht weg..

    Code:
    Term: T_START_BRACKET Expr T_END_BRACKET
        | T_num
        | T_id
        | T_id T_START_BRACKET TermFuncExpr T_END_BRACKET /* Funktionsaufruf */
        ;
    
    TermFuncExpr: 
        | TermFuncExprS
        ;
    
    TermFuncExprS: Expr
           | Expr T_COMMA TermFuncExprS
        ;
    Code:
    State 32 conflicts: 1 shift/reduce
    
    state 32
    
       35 Term: T_id .
       36     | T_id . T_START_BRACKET TermFuncExpr T_END_BRACKET
    
        T_START_BRACKET  shift, and go to state 31
    
        T_START_BRACKET  [reduce using rule 35 (Term)]
        $default         reduce using rule 35 (Term)
    Meiner Meinung nach ist folgender Code das Problem: functionname (Expr)
    der parser weiß nicht, ob das jetzt eine funktion als Regel T_id T_START_BRACKET TermFuncExpr T_END_BRACKET oder T_id und T_START_BRACKET Expr T_END_BRACKET ist

  28. #26
    raven-worx's Avatar
    Title
    Elite
    Join Date
    Feb 2005
    Location
    Tulln an der Donau
    Posts
    403
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    wieso so umständlich?

    Code:
    Term:  T_START_BRACKET Expr T_END_BRACKET
            | T_num
            | T_id
            | T_id T_START_BRACKET ExprList T_END_BRACKET
            ;
    
    ExprList:      Expr
            | Expr T_COMMA ExprList
            | 
            ;
    ...reicht schon aus.

    mfg

  29. #27

    Title
    Principal
    Join Date
    Oct 2007
    Posts
    86
    Thanks Thanks Given 
    29
    Thanks Thanks Received 
    61
    Thanked in
    21 Posts
    @raven-worx: Das hatte ich vorher auch so... Selbst mit deinem Code funktioniert es bei mir nicht

    Code:
    State 32 conflicts: 1 shift/reduce
    
    state 31
    
       36 Term: T_id T_START_BRACKET . ExprList T_END_BRACKET
    
        T_id             shift, and go to state 32
        T_num            shift, and go to state 15
        T_not            shift, and go to state 20
        T_START_BRACKET  shift, and go to state 21
        T_STAR           shift, and go to state 33
        T_MINUS          shift, and go to state 23
    
        $default  reduce using rule 39 (ExprList)
    
        Expr        go to state 54
        PrefixExpr  go to state 28
        Term        go to state 29
        ExprList    go to state 55
    
    
    state 32
    
       35 Term: T_id .
       36     | T_id . T_START_BRACKET ExprList T_END_BRACKET
    
        T_START_BRACKET  shift, and go to state 31
    
        T_START_BRACKET  [reduce using rule 35 (Term)]
        $default         reduce using rule 35 (Term)
    edit(12axing): sorry, dass ich deinen post editiert habe, war nicht meine absicht, ich hab den edit mit dem quote button verwechselt, und mich danach gewundert, warum der post nicht mit meinem usernamen versehen ist
    Last edited by 12er; 11-04-2009 at 20:40.

  30. #28
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by earlyhost View Post
    @raven-worx: Das hatte ich vorher auch so... Selbst mit deinem Code funktioniert es bei mir nicht

    Code:
    State 32 conflicts: 1 shift/reduce
    
    state 31
    
       36 Term: T_id T_START_BRACKET . ExprList T_END_BRACKET
    
        T_id             shift, and go to state 32
        T_num            shift, and go to state 15
        T_not            shift, and go to state 20
        T_START_BRACKET  shift, and go to state 21
        T_STAR           shift, and go to state 33
        T_MINUS          shift, and go to state 23
    
        $default  reduce using rule 39 (ExprList)
    
        Expr        go to state 54
        PrefixExpr  go to state 28
        Term        go to state 29
        ExprList    go to state 55
    
    
    state 32
    
       35 Term: T_id .
       36     | T_id . T_START_BRACKET ExprList T_END_BRACKET
    
        T_START_BRACKET  shift, and go to state 31
    
        T_START_BRACKET  [reduce using rule 35 (Term)]
        $default         reduce using rule 35 (Term)
    :
    Ist deine Grammatik mehrdeutig? Am häufigsten sind bei mir Konflikte aufgetreten, wenn die Grammatik mehrdeutig war. Bedenke, dass die Gesamtheit der LALR(1) Grammatiken eine echte Teilmenge eindeutiger kontextfreier Grammatiken ist.

  31. #29

    Title
    Master
    Join Date
    Sep 2006
    Posts
    170
    Thanks Thanks Given 
    2
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts
    Hilfe! Ich bekomm das einfachste Programm nicht hin:

    Code:
    %start Program
    
    %%
    Program : '+'
            ;
    %%
    Ich hab auch die main und yyerror Methoden implementiert, aber ich bekomm immer einen "syntax error" wenn ich den Parser mit

    Code:
    echo "+" | ./parser
    starte. Das Scanner Beispiel läuft fehlerfrei...
    Kann mir da bitte jemand weiterhelfen! Ich bin schon fast am Verzweifeln...

    EDIT:
    So. Habe mittlerweile ein kleines Tutorial gefunden, wo das Zusammenspiel von lex und yacc halbwegs gut erklärt wird.
    http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html
    Warum wird das aber im Skriptum nicht auch beschrieben???
    Last edited by Lex; 16-04-2009 at 16:33.

  32. #30

    Title
    Elite
    Join Date
    Oct 2008
    Posts
    287
    Thanks Thanks Given 
    51
    Thanks Thanks Received 
    88
    Thanked in
    50 Posts
    Habe grade (etwas verärgert) festgestellt, dass das Testscript alle Ausgaben des Programms (stdout und sterr !!) auf /dev/null umleitet und somit sämtliche debugausgaben und fehlemeldungen komplett unterdrückt.

    Wer das wie ich eher käsig findet muss sich das Testscript in den eigenen Ordner kopieren und die redirections einfach rauslöschen.

  33. #31
    Neverlasting's Avatar
    Title
    Hero
    Join Date
    Oct 2007
    Posts
    189
    Thanks Thanks Given 
    29
    Thanks Thanks Received 
    27
    Thanked in
    19 Posts
    Quote Originally Posted by Aeroflare View Post
    Ich hab auch extra das trailing comma nicht implementiert (auch wenn's 2-3 Zeilen mehr sind...) ich empfind das einfach als unkorrekt
    Stimme dir zu, dass es nicht ästhetisch ist, allerdings steht es so in der Angabe drin und es könnte wohl somit Testfälle geben, die auch genau das prüfen.
    Total sinnlos ist es eh nicht, man könnte als Argument für ein solches Verhalten angeben, dass es praktisch ist, wenn der Code automatisch erzeugt wird.
    "Me love technology." -- Cookie Monster
    "Oft ist das Denken schwer, indes // das Schreiben geht auch ohne es." -- Wilhelm Busch

  34. #32
    Aeroflare's Avatar
    Title
    Baccalaureus
    Join Date
    Jan 2005
    Posts
    541
    Thanks Thanks Given 
    13
    Thanks Thanks Received 
    49
    Thanked in
    34 Posts
    Ja ich hab's mittlerweile eh geändert, weil die Projektleitung bestätigt hat, dass ausdrücklich das trailing comma erwünscht ist...
    There's a place in the dark where the animals go
    you can take off your skin in the cannibal glow
    Juliet loves a beat and the lust it commands
    drop the dagger and lather the blood on your hands - Romeo

  35. #33
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by Plantschkuh! View Post
    1. Sowas ist in der Newsgroup ziemlich sicher besser aufgehoben, weil dort die Verantwortlichen tatsächlich mitmachen.
    2. Die Sache mit dem trailing comma war schon immer so (hab grad in meinen Unterlagen von 2003 nachgekramt) und ist also wohl Absicht.
    3. Fürs trailing comma spricht, daß solche Listen (einen Hauch) einfacher zu generieren sind. In C ist es stellenweise auch erlaubt:
    Code:
    enum { A, B, C, };
    Und ich finde trailing commas einen Hauch dümmer . Jetzt kann ich schon wieder an meinen Beispielen was ändern, was ich nicht implementiert habe, weil es mir so blöd vorkam, dass ich es als Fehler in der Angabe interpretiert habe (z.B. die Sache mit den in einer Funktion global sichtbaren Variablen ...).
    Last edited by 12er; 18-04-2009 at 10:21.

  36. #34
    itachi's Avatar
    Title
    Elite
    Join Date
    Nov 2006
    Posts
    319
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    (z.B. die Sache mit den in einer Funktion global sichtbaren Variablen ...).
    Bissl OT: Absolut, das mit den überall sichtbaren Variablen ist saudumm; und macht die ag ne ganze Ecke anstrengender. Bin gestern Nachmittag endlich damit fertig geworden, frag nicht wieviel zeit mich dieser ganze Mist gekostet hat. Hoffe Codea wird ned so schwer (sonst kann ich mich erschießen ).
    Our Country is a peace loving democracy....
    OF course it is ...PWNED.
    http://blog.metal-hammer.de/wp-conte...presidency.jpg

  37. #35
    Paulchen's Avatar
    Title
    Super Moderator
    Join Date
    Oct 2004
    Location
    /home/paulchen
    Posts
    8,086
    Thanks Thanks Given 
    1,967
    Thanks Thanks Received 
    1,455
    Thanked in
    994 Posts
    Quote Originally Posted by itachi View Post
    Bissl OT: Absolut, das mit den überall sichtbaren Variablen ist saudumm; und macht die ag ne ganze Ecke anstrengender.
    Hm. Wenn nicht jede Variable in der ganzen Funktion sichtbar ist, musst du für jeden Block eine separate Liste an sichtbaren Variablen verwalten. Dass das viel einfacher ist, wage ich zu bezweifeln.

    Mit in der ganzen Funktion sichtbaren Variablen kannst du an einer Stelle pro Funktion eine Datenstruktur anlegen, den Pointer darauf an alle notwendigen Stellen weiterreichen und überall Variablen reinstopfen, wenn sie deklariert werden. In einem Traversal schaust du dann bei jeder Variablenverwendung, ob diese Datenstruktur diese Variable auch wirklich enthält. Halt ich persönlich für einfacher.

    Quote Originally Posted by itachi View Post
    Hoffe Codea wird ned so schwer (sonst kann ich mich erschießen ).
    Meiner Meinung nach sind die Codeerzeugungsbeispiele schwerer/aufwändiger als die attributierte Grammatik.

  38. #36
    itachi's Avatar
    Title
    Elite
    Join Date
    Nov 2006
    Posts
    319
    Thanks Thanks Given 
    7
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    Danke Paulchen dass du meine Welt zerstörst . Als ob ich mit Ase etc. nicht schon genug zu tun hätte. Wenn ma wenigstens (unter der Vorraussetzung, dass ma immer 100% bekommt), mit der ag dann schon Positiv wär.
    Our Country is a peace loving democracy....
    OF course it is ...PWNED.
    http://blog.metal-hammer.de/wp-conte...presidency.jpg

  39. #37

    Title
    Dipl.Ing
    Join Date
    Apr 2008
    Posts
    1,519
    Thanks Thanks Given 
    64
    Thanks Thanks Received 
    100
    Thanked in
    85 Posts
    Gibts eigentlich irgendwelche "heiklen" Eingaben mit dem man den Parser testen sollte und an die man im ersten Moment nicht denkt? So wie die 64bit Zahl (oder was das war) beim Scanner.

    Test am Server und das hier gepostete Testfile frisst mein Parser zwar anstandslos, aber man weiß ja nie...
    Random nontrivial stuff: http://rjlipton.wordpress.com/ Proofs for: P=NP, P!=NP, P vs NP is undecidable: http://www.win.tue.nl/~gwoegi/P-versus-NP.htm

  40. #38

    Title
    Elite
    Join Date
    Oct 2007
    Location
    St. Pölten
    Posts
    267
    Thanks Thanks Given 
    23
    Thanks Thanks Received 
    35
    Thanked in
    22 Posts
    Ich habe eine Frage bezüglich des Exit-Status.

    Folgendes wird korrekt als exit-Status 1 erkannt:

    Code:
    1. $g1892
    2. _ { } | ~
    3. [ ] \ ^
    4. % & +
    5. ' ? !
    6. . , "
    7. _abc
    8. $
    Folgendes wird als Exit-Status 2 erkannt:

    Code:
    1. ; : $
    2. #
    #
    # This file is not valid
    #                       
    #                       
    
    müssen();
    
    ändern();
    ad 1) Hier matcht der Scanner korrekt ';', aber die Grammatik stimmt nicht.
    ad 2) m wird als Identifier gematcht, ist auch nicht korrekt laut Grammatik, daher Exit-Status 2.

    Stimmt das so?

  41. #39
    viper's Avatar
    Title
    Hero
    Join Date
    Mar 2005
    Location
    Wien
    Posts
    203
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    16
    Thanked in
    11 Posts
    Quote Originally Posted by christian8287 View Post
    Ich habe eine Frage bezüglich des Exit-Status.

    Folgendes wird korrekt als exit-Status 1 erkannt:
    [..]

    Folgendes wird als Exit-Status 2 erkannt:

    [..]
    Code:
    2. #
    #
    # This file is not valid
    #                       
    #                       
    
    müssen();
    
    ändern();
    ad 1) Hier matcht der Scanner korrekt ';', aber die Grammatik stimmt nicht.
    ad 2) m wird als Identifier gematcht, ist auch nicht korrekt laut Grammatik, daher Exit-Status 2.

    Stimmt das so?
    Ja. Soweit ich weiß wird so was (gemischte Scanner + Parser-Fehler) nicht absichtlich getestet, die Empfehlung letztes Jahr war aber die, immer den ersten auftretenden Fehler zu melden. Bei Beispiel 2.2 hängt der genaue Fehler davon ab, was man als "Buchstabe" sieht, tatsächlich wird hier aber wahrscheinlich ein Parser-Fehler gemeldet werden (weil func fehlt).
    100% trivial

  42. #40

    Title
    Master
    Join Date
    Oct 2005
    Posts
    131
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    10
    Thanked in
    9 Posts
    Ich habe jetzt erst mit dem Beispiel begonnen und hätte ein paar Fragen die mir den Einstieg erleichtern sollen:
    1) Inwieweit sollte man die Grammatik anpassen? Bei "Pars: { id ',' } [ id ] ;" zb mag bison die eckigen Klammern nicht (die afaik die Option ausdrücken, also optionalen Inhalt umschließen). Muss ich diese Teile umformulieren? Wenn wir gleich beim Thema Klammern sind, was bedeuten die geschwungenen Klammern (im Skriptum steht Iteration aber ich kann mir darunter in diesem Zusammenhang nichts vorstellen) bzw die runden Klammern als Metaoperator (also nicht als Literal der geparsten Sprache)
    2) Ist es sinnvoll/notwendig alle Lexeme einzeln als Token zu behandeln? Bei den Keywords habe ich jedenfalls keine andere Möglichkeit gefunden.
    3) Kennt wer vielleicht noch ein gutes Tutorial? Das oben verlinkte habe ich mir bereits angesehen und ebenso auch etwas im YACC Manual gelesen.

    Sry wenn ich euch mit solchen Noobfragen belästige aber ich steh gerade ein bisschen auf der Leitung und hab das Beispiel wohl unterschätzt.

  43. #41
    Paulchen's Avatar
    Title
    Super Moderator
    Join Date
    Oct 2004
    Location
    /home/paulchen
    Posts
    8,086
    Thanks Thanks Given 
    1,967
    Thanks Thanks Received 
    1,455
    Thanked in
    994 Posts
    Quote Originally Posted by Starcraftfreak View Post
    1) Inwieweit sollte man die Grammatik anpassen? Bei "Pars: { id ',' } [ id ] ;" zb mag bison die eckigen Klammern nicht (die afaik die Option ausdrücken, also optionalen Inhalt umschließen). Muss ich diese Teile umformulieren? Wenn wir gleich beim Thema Klammern sind, was bedeuten die geschwungenen Klammern (im Skriptum steht Iteration aber ich kann mir darunter in diesem Zusammenhang nichts vorstellen) bzw die runden Klammern als Metaoperator (also nicht als Literal der geparsten Sprache)
    yacc/bison kann keine EBNF. Du musst die entsprechenden Konstrukte entsprechend umformulieren, sodass yacc/bison damit klarkommt; geschwungene Klammern stehen für Elemente, die beliebig oft vorkommen (also auch ausgelassen werden) dürfen.
    Quote Originally Posted by Starcraftfreak View Post
    2) Ist es sinnvoll/notwendig alle Lexeme einzeln als Token zu behandeln? Bei den Keywords habe ich jedenfalls keine andere Möglichkeit gefunden.
    Du kannst damit jedenfalls nichts falsch machen. Für Lexeme, die aus einem einzelnen Zeichen bestehen, brauchst du aber keine neuen Tokens definieren, sondern kannst die Zeichen selbst als Token verwenden; im Scanner zum Beispiel:
    Code:
    ','   RETURN(',');
    ':'   RETURN(':');
    oder kürzer:
    Code:
    ','|':' RETURN(yytext[0]);
    im Parser zum Beispiel:
    Code:
    Par ',' Par
    Quote Originally Posted by Starcraftfreak View Post
    3) Kennt wer vielleicht noch ein gutes Tutorial?
    Funktionierende Beispiele halte ich neben diversen Tutorials immer für ein gutes Anschauungsmaterial.

  44. #42

    Title
    Elite
    Join Date
    Oct 2008
    Posts
    287
    Thanks Thanks Given 
    51
    Thanks Thanks Received 
    88
    Thanked in
    50 Posts
    Prinzipiell würd ich dir raten dir mal die "Allgemeinen Fragen" von der LVA-Homepage durchzulesen. Ich weiß zwar nicht, warum die LVA-Leitung so wichtige Infos so seltsam ausgelagert hat; dort finden sich aber einige Dinge, die mir sehr weitergeholfen haben.

  45. #43

    Title
    Master
    Join Date
    Oct 2005
    Posts
    126
    Thanks Thanks Given 
    10
    Thanks Thanks Received 
    3
    Thanked in
    2 Posts
    Zum Ausführen, nichts aufregendes

    Code:
    func foo() end; func foo(a) end;
    func foo(a,b,c,)
      d <- ((1*2)>4)=2;
      if ((1+2)+3) then return 1; end;
      if 1 then 1; else 2; end;
      if 1 then 1; elsif (3+3) then 3; elsif (1*2) then 4; else 2; end;
      2;
      *2;
      foo;
      foo();
      foo(a,b,c);
      foo(a,b,c,d,);
      exit foo;
      restart foo;
      return 1;
      foo loop d <- a+(b*c); end;
      *d <- a+(b*c);
      *2 <- a+(b*c);  
      foo <- a+(b*c);
      *foo(a,b,c) <- a+(b*c);
    end;

  46. #44

    Title
    Hero
    Join Date
    Oct 2007
    Posts
    196
    Thanks Thanks Given 
    32
    Thanks Thanks Received 
    11
    Thanked in
    8 Posts
    Auf die Gefahr hin ausgelacht zu werden: Was heisst bitte Expr: ( not | ’-’ ) Term? is das ein [not|-]+ Term?
    opentu.net - freier, unzensierter Informationsaustausch -
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum.

  47. #45

    Title
    Dipl.Ing
    Join Date
    Apr 2008
    Posts
    1,519
    Thanks Thanks Given 
    64
    Thanks Thanks Received 
    100
    Thanked in
    85 Posts
    Heißt "oder" so viel ich verstanden hab. Steht aber genauer erklärt bei "Allgemeine Fragen" auf der HP
    Random nontrivial stuff: http://rjlipton.wordpress.com/ Proofs for: P=NP, P!=NP, P vs NP is undecidable: http://www.win.tue.nl/~gwoegi/P-versus-NP.htm

  48. The Following 2 Users Say Thank You to m4rS For This Useful Post:


  49. #46

    Title
    Master
    Join Date
    Oct 2005
    Posts
    126
    Thanks Thanks Given 
    10
    Thanks Thanks Received 
    3
    Thanked in
    2 Posts
    Quote Originally Posted by tresh View Post
    is das ein [not|-]+ Term?
    Nein genau ein...

    not Term oder '-' Term

    ... not oder '-' kommen genau einmal vor. D.h. "not not 1" ist ungültig, ebenso wie "- not - 1", mit Klammerung passt´s aber: not(not(1)) Korrigiert mich

  50. #47

    Title
    Master
    Join Date
    Oct 2005
    Posts
    131
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    10
    Thanked in
    9 Posts
    Danke für die Tipps und Hinweise. Ich habe meinen Parser inzwischen so weit, dass nur ein paar Feinheiten bei der Grammatik verbessert werden müssen (aus den Testfällen aus der Newsgroup werden bei mir aktuell 11/13 korrekt bearbeitet).

    Eine kleine Randbemerkung bezüglich einer Kleinigkeit die mich etwas geärgert hat: Es hat ne Weile gedauert bis ich herausgefunden habe, dass man yyerror im Header der Grammatik forward deklarieren muss, ansonsten hat gcc immer gemeckert. Vielleicht hilft das ja noch dem ein oder anderen.

    Edit:
    Wie schlimm sind shift/reduce Konflikte (laut der FAQ sind diese weniger ein Problem als reduce/reduce)? Gibt es ein paar allgemeine Guidelines wie man diese reduzieren kann?
    Last edited by Starcraftfreak; 21-04-2009 at 16:52.

  51. #48

    Title
    Elite
    Join Date
    Oct 2007
    Location
    St. Pölten
    Posts
    267
    Thanks Thanks Given 
    23
    Thanks Thanks Received 
    35
    Thanked in
    22 Posts
    Quote Originally Posted by Starcraftfreak View Post
    Wie schlimm sind shift/reduce Konflikte (laut der FAQ sind diese weniger ein Problem als reduce/reduce)? Gibt es ein paar allgemeine Guidelines wie man diese reduzieren kann?
    Du solltest am besten schon schauen, dass du keine Konflikte hast. Wenn du einfach versuchst Mehrdeutigkeiten bei den Ableitungen zu vermeiden sollte das schon helfen.

  52. #49

    Title
    Master
    Join Date
    Oct 2005
    Posts
    131
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    10
    Thanked in
    9 Posts
    Ich erkenne langsam die Natur meiner Konflikte. Es liegt wohl daran wie ich die EBNF Konstrukte aufgelöst habe.

    Zb habe ich
    Code:
    Program: { Funcdef ';' }
            ;
    in
    Code:
    Program: /*empty*/
            | Funcdef ';'
            | Program Funcdef ';'
            ;
    umgewandelt.

    Das habe ich bei anderen Elementen die beliebig oft vorkommen sollen ähnlich gemacht, was bei mir eine Menge shift/reduce Konflikte auslöst. Muss ich das jetzt in jedem Fall durch Zusatzregeln lösen, die die Mehrdeutigkeiten eliminieren (in den meisten Fällen beziehen sich die Mehrdeutigkeiten auf den /*empty*/ Zustand, ich stelle mir halt die Frage der Sinnhaftigkeit)?

    Vermutlich liegt das ganze an meinem mangelndem Verständnis der ganzen Materie, aber ich frage lieber 3x dumm und habs dann verstanden als ich mach es 1x so "weil es halt so ist" ohne was daraus gelernt zu haben.

  53. #50

    Title
    Elite
    Join Date
    Oct 2007
    Location
    St. Pölten
    Posts
    267
    Thanks Thanks Given 
    23
    Thanks Thanks Received 
    35
    Thanked in
    22 Posts
    Wieso nicht gleich so:

    Code:
    Program: 
                  | Funcdef ';' Program
    Der Sinn der Elimination von Mehrdeutigen ist der, dass die Grammatik dann nicht weiß welchen Weg du eigentlich gehen willst. Im schlimmsten Fall geht sie einen "falschen" Weg und es wird falsch abgeleitet. Wenn du Glück hast, tun beide Wege das gleiche und nichts passiert. Daher ist sinnvoll alle Konflikte zu eliminieren um sicher zu gehen, dass die Grammatik auch das macht was du vorhast.

    Du musst nicht zusätzliche Regeln einführen, oft denkt man zu kompliziert und bekommt dadurch dann die Konflikte (siehe oben).

  54. #51

    Title
    Principal
    Join Date
    Oct 2006
    Posts
    72
    Thanks Thanks Given 
    4
    Thanks Thanks Received 
    4
    Thanked in
    3 Posts
    Wenn ich mein make Aufrufe bekomme ich die folgenden Meldungen:

    [u0625723:~/abgabe/parser:577] make
    yacc -d parser.y
    flex -t parser.l > lexer.c
    gcc -Wall lexer.c y.tab.c -o parser -lfl
    <stdout>:1185: warning: âyyunputâ defined but not used
    y.tab.c: In function âyyparseâ:
    y.tab.c:1331: warning: implicit declaration of function âyylexâ


    Wie bekomme ich die 2 Warnings weg?

  55. #52

    Title
    Master
    Join Date
    Oct 2005
    Posts
    131
    Thanks Thanks Given 
    3
    Thanks Thanks Received 
    10
    Thanked in
    9 Posts
    Hast du yylex in der Grammatik als extern definiert? Das andere Warning hab ich bisher noch nciht gesehen.

  56. #53
    sebus's Avatar
    Title
    Baccalaureus
    Join Date
    Oct 2002
    Location
    Ottakring
    Posts
    733
    Thanks Thanks Given 
    21
    Thanks Thanks Received 
    5
    Thanked in
    4 Posts
    hab im lex-file meine definition der hexzahl geändert:

    (damals im) SCANNER: {HEX} return(strtol(yytext+1, 0, 16));
    (jetzt im) PARSER: {HEX} return(NUMBER);
    ansonsten kann der parser denk ich die hexzahlen nicht als NUMBER (tokenname) erkennen.

    Lieg ich da falsch, ist das unnötig? Für die AG werd ich das dann sowieso umbauen müssen

    Lg,

    derSeb
    Alles ist relativ.

  57. #54

    Title
    Principal
    Join Date
    Apr 2002
    Location
    Vienna
    Posts
    50
    Thanks Thanks Given 
    9
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    Quote Originally Posted by Tyron View Post
    Wenn ich mein make Aufrufe bekomme ich die folgenden Meldungen:

    [u0625723:~/abgabe/parser:577] make
    yacc -d parser.y
    flex -t parser.l > lexer.c
    gcc -Wall lexer.c y.tab.c -o parser -lfl
    <stdout>:1185: warning: âyyunputâ defined but not used
    y.tab.c: In function âyyparseâ:
    y.tab.c:1331: warning: implicit declaration of function âyylexâ


    Wie bekomme ich die 2 Warnings weg?
    hast du
    #include <stdlib.h>
    bei deinem parser included?

  58. #55

    Title
    Principal
    Join Date
    Apr 2002
    Location
    Vienna
    Posts
    50
    Thanks Thanks Given 
    9
    Thanks Thanks Received 
    4
    Thanked in
    4 Posts
    habe mit den parser und ag tests aus der newsgroup insgesamt 28 test die funktionieren. hat noch wer tests?

  59. #56

    Title
    Principal
    Join Date
    Oct 2007
    Posts
    64
    Thanks Thanks Given 
    11
    Thanks Thanks Received 
    22
    Thanked in
    9 Posts

    In Defense of the trailing comma

    Quote Originally Posted by 12axing View Post
    Und ich finde trailing commas einen Hauch dümmer . Jetzt kann ich schon wieder an meinen Beispielen was ändern, was ich nicht implementiert habe, weil es mir so blöd vorkam, dass ich es als Fehler in der Angabe interpretiert habe (z.B. die Sache mit den in einer Funktion global sichtbaren Variablen ...).
    Trailing Kommas haben ihren Sinn, und erleichtern das Ändern des Codes während der Entwicklung. Beispiel (in C):

    Code:
    enum {
        FIRST,
        BLA,
        BLUBB,
        LALALA
    };
    Wenn du jetzt die Zeile mit "LALALA" auskommentierst (gehen wir von C99 aus, also mit "//"), funktioniert der Code noch immer, weil die Kommas am Ende erlaubt sind. Sonst müsstest ein mehrzeilige Kommentar machen, das zwischen BLUBB und dem Komma beginnt und nach LALALA aufhört.

    Idealerweise lässt du das Trailing Komma aber auch bei LALALA dran, dann tust du dir auch mit dem Verschieben von Statements leichter (dd und p in vim), weil du nicht die fehlenden Kommas ergänzen musst, bzw. das überflüssige Komma entfernen musst (zB wenn du im obigen Beispiel die Zeile LALALA hinter FIRST schiebst). Und wenn du mit Git/SVN arbeitest, schauen deine diffs auch schöner (und lesbarer) aus, weil du beim Hinzufügen nur eine Zeile (die neue) ändern musst, statt 2 (Komma hinzufügen in letzter Zeile und danach neue Zeile einfügen).

    Hier das nicht so schöne diff:

    Code:
    --- old_bad.c    2009-04-22 12:15:44.000000000 +0200
    +++ new.c    2009-04-22 12:15:56.000000000 +0200
    @@ -2,6 +2,7 @@
         FIRST,
         BLA,
         BLUBB,
    -    LALALA
    +    LALALA,
    +    NEUES_ELEMENT
      };
    Und hier das schöne diff, wo du ein Trailing Komma dabei hast:

    Code:
    --- old.c    2009-04-22 12:15:29.000000000 +0200
    +++ new.c    2009-04-22 12:15:56.000000000 +0200
    @@ -3,5 +3,6 @@
         BLA,
         BLUBB,
         LALALA,
    +    NEUES_ELEMENT,
      };
    >>> x=';print"x="+repr(x)+x';print"x="+repr(x)+x

  60. #57
    12er's Avatar
    Title
    Super Moderator
    Join Date
    May 2005
    Location
    NICHT Zwölfaxing
    Posts
    455
    Thanks Thanks Given 
    288
    Thanks Thanks Received 
    26
    Thanked in
    13 Posts
    Quote Originally Posted by thp View Post
    Trailing Kommas haben ihren Sinn, und erleichtern das Ändern des Codes während der Entwicklung ...
    Da gebe ich dir sogar nachträglich recht. Es kam mir auf dem ersten Blick komisch vor, und mir ist vor ublu nie aufgefallen, dass es z.B. in Sprachen wie C akzeptiert wird .

  61. #58

    Title
    Baccalaureus
    Join Date
    Jul 2007
    Location
    Wien und Noe
    Posts
    576
    Thanks Thanks Given 
    14
    Thanks Thanks Received 
    49
    Thanked in
    39 Posts
    Hallo,
    Bei mir hat leider ein Test fehlgeschlagen da ich denke ich zumindest folegendes übersehen habe: func() x*x+x; end; darf nicht sein und müsste func() x*(x+x); end; lauten oder irre ich mich da ?
    Wenn ich den Fehler nämlich behebe das der oben genannte fall funktioniert schlägt folgender zb. fehl: func x() x*x*x; end; da er bei mir dann Status 2 liefert aber laut
    Abgabesystem Status 0 liefern sollte. Leider hab ich gerade keine Ahnung was jetzt genau das Problem ist.

    mfg Rene

  62. #59
    Paulchen's Avatar
    Title
    Super Moderator
    Join Date
    Oct 2004
    Location
    /home/paulchen
    Posts
    8,086
    Thanks Thanks Given 
    1,967
    Thanks Thanks Received 
    1,455
    Thanked in
    994 Posts
    Quote Originally Posted by nowi View Post
    Hallo,
    Bei mir hat leider ein Test fehlgeschlagen da ich denke ich zumindest folegendes übersehen habe: func() x*x+x; end; darf nicht sein und müsste func() x*(x+x); end; lauten oder irre ich mich da ?
    So ist es.

    Quote Originally Posted by nowi View Post
    Wenn ich den Fehler nämlich behebe das der oben genannte fall funktioniert schlägt folgender zb. fehl: func x() x*x*x; end; da er bei mir dann Status 2 liefert aber laut
    Abgabesystem Status 0 liefern sollte. Leider hab ich gerade keine Ahnung was jetzt genau das Problem ist.
    In der Grammatik der Angabe steht folgendes:
    Code:
    Expr: ( not | ’-’ ) Term  
        | Term { ’+’ Term }  
        | Term { ’*’ Term }
    Überleg dir mal, was das fett Hervorgehobene bedeutet.

  63. The Following 2 Users Say Thank You to Paulchen For This Useful Post:


  64. #60

    Title
    Baccalaureus
    Join Date
    Jul 2007
    Location
    Wien und Noe
    Posts
    576
    Thanks Thanks Given 
    14
    Thanks Thanks Received 
    49
    Thanked in
    39 Posts
    Mah ich bin ein Depp. Hab die Regel vergessen wenn man mehrere * term haben möchte.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •