Lassen Sie Bison nur dann zum Startsymbol reduzieren, wenn EOF gefunden wird

Ich benutze Bison mit Flex. Ich habe die folgende Regel in meiner Yacc-Eingabedatei:

program     : PROGRAM m2 declarations m0 block {cout << "Success\n"} ;

Das Problem ist, dass wenn ich ein Programm habe, das teilweise korrekt ist, aber dann etwas "Müll" vor EOF ist, es sich nach der vorherigen Regel verringert, "Erfolg" meldet und erst dann einen Fehler meldet.

Ich möchte EOF am Ende der obigen Regel einfügen, aber dann müsste Flex beim Lesen EOF zurückgeben<<EOF>>, und wie würde Bison wissen, wann das Programm zu beenden ist? Jetzt habe ich das in Flex:

<<EOF>>    {return 0;}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage