2016-04-10 6 views
0

ich einige Legacy-Bison Code lese, und es hat eine Regel wie folgt aus:, was die Bedeutung von @ in Bison-Code ist

function_decl: name body function_end 
    { if($3 != $1->id) { 
      yyerror(@3, "error: function name does not match end label"); 
     } 
    } 
; 

Ich verstehe, dass ich auf den Wert von jedem Token zurückgegeben $ bezieht sich in die Regel. Aber was bedeutet @i? Ich habe versucht, dafür zu googeln, habe aber keinen relevanten Treffer bekommen.

+0

Dokumentation? http://www.gnu.org/software/bison/manual/html_node/Table-of-Symbols.html – CaptJak

Antwort

0

@n ist der "Standort" entsprechend dem Symbol $n. Die Verwendung einer beliebigen @-Referenz in einer Bison-Grammatik aktiviert automatisch Standorte, aber es liegt immer noch in der Verantwortung des Scanners, die Informationen zu generieren (in der globalen Variablen yylloc).

Eine Position ist eine Reihe von Positionen, die den Anfang und das Ende des Terminals oder Nicht-Terminals darstellen. Standardmäßig wird es in einem struct mit vier Feldern gehalten: first_line, first_column, last_line, last_column.

Positionsobjekte für Nicht-Terminals werden vom Bison-Parser automatisch erstellt. Standardmäßig erstreckt sich der Standortbereich vom Anfang des ersten Symbols bis zum Ende des letzten Symbols.

Weitere Informationen finden Sie unter bison manual.