bison / flex: falsche Zeile drucken

8

Ich benutze bison + flex, um Dateien zu analysieren. Bei Fehler wird yyerror () aufgerufen. Wie kann ich die Zeilennummer oder die Zeichenfolge erhalten, die gegen die Regeln verstößt, um sie mit der Fehlermeldung zu drucken?

    
Jakub M. 24.06.2011, 11:33
quelle

2 Antworten

8

Die Zeilennummer ist einfach: yylineno ist die Zeilennummer. Geben Sie %option yylineno am Anfang Ihrer .l-Datei an.

Nun, fast einfach. Lookahead kann die Zeilennummer manchmal um eins verringern. Anstatt etwas wie "Fehler bei Zeile #xxx" zu sagen, möchten Sie vielleicht sagen, dass der Fehler in der Nähe von Zeile #xxx aufgetreten ist.

Was den Rest angeht, liegt es an Ihnen. Sie müssen die nicht ganz gültige Syntax erfassen und den entsprechenden Warn- oder Fehlerhandler aufrufen. Siehe das O'Reilly "Flex & Bison" Buch für Details; es hat ein ganzes Kapitel über Fehlermeldungen. Ein ganzes Kapitel ist ein bisschen zu viel, um es auf dieser Q & A-Site zu reproduzieren.

    
David Hammen 24.06.2011, 12:01
quelle
2

yylineno gibt Ihnen die Lineno in Bearbeitung

Sie können den Benutzer auch wissen lassen, welcher Text den Fehler mit yytext auf der Flex-Seite verursacht hat:

%Vor%

yytext enthält nur den Text für die übereinstimmende Regel.

Wenn Sie die gesamte Zeile angeben möchten, müssen Sie es selbst tun. Öffnen Sie die Datei nach der Zeilennummer yylineno und drucken Sie sie aus. Ein guter Ort dafür ist die eigene Implementierung von yyerror . Funktion.

    
GriffinHeart 24.06.2011 12:15
quelle

Tags und Links