Frage

Ich arbeite an einem Compiler Implementierung und mag überprüfen, ob das Ende der Datei erreicht ist?

Ich weiß, dass dies die yywrap () Funktion in der lex-Datei durchgeführt werden kann, verwendet wird, aber die Voraussetzung ist, dass wir wollen, wenn der EOF ausdrücklich als im Hex-Wert 0x1a definiert, so wie verweisen wir.

Beispiel:

main () {     printf ( "\ n Prüfen EOF-Markierung"); '0x1a'. <- die tatsächliche EOF-Markierung

Ich mag die oben kein Syntaxfehler zu sein, aber als Fehler gemeldet werden   Unausgeglichen Klammern sind oder falsch definiert.

Kann die oben getan werden? Meine Forderung ist nur die EOF-Token in den Parser zu haben, die leider, ich habe so bis heute nicht in der Lage zu tun: - ((, der Rest der Arbeit leicht wie dann geschehen wird, muss ich nur noch eine Regel geben wie zum Beispiel:

print    :    print_stmt '(' stmt_valid ')' colon '\n' 
{
    OK do the rest
}
         |    print_stmt '(' stmt_valid ')' colon end_indicator
{
    print error message and close application.
}
War es hilfreich?

Lösung

Machen Sie Ihre Lexer ein Token für die EOF zurück.

Ich schlage vor, dass Sie das Token für zwei Fälle zurück:

  1. getc() zurück -1 (das übliche EOF-Zeichen). In diesem Fall macht den Token-Text leer

  2. getc() zurück '\x1a'. In diesem Fall setzen Sie dieses Zeichen in dem Token-Text.

Auf diese Weise können Sie Ihre Grammatik zwischen diesen beiden Fällen unterscheiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top