antlr globale Regel Geltungsbereichserklärung vs @Members Deklaration

8

Welche würden Sie bevorzugen, eine Variable zu deklarieren in welchem ​​Fall, globalen Bereich oder @Members Deklaration? Es scheint mir, dass sie für den gleichen Zweck dienen können?

UPDATE Hier ist eine Grammatik, um zu erklären, was ich meine.

%Vor%     
mert inan 16.05.2012, 07:19
quelle

1 Antwort

9

Beachten Sie, dass Sie neben globalen (ANTLR) Bereichen auch lokale Regelbereiche haben können, wie folgt:

%Vor%

Die einzige Möglichkeit, lokale Regelbereiche zu verwenden, ist, wenn viele Prädikate vorhanden sind oder das globale Zurückverfolgen aktiviert ist (was zu allen Regeln führt) Prädikate vor ihnen). In diesem Fall können Sie eine Membervariable String x erstellen (oder sie in einem globalen Bereich definieren) und sie in der Regel parse festlegen, aber Sie ändern diese Instanz / Bereichsvariable möglicherweise danach die der Parser zurückverfolgen könnte, und diese Rückverfolgung wird nicht bewirken, dass die globale Variable in ihren ursprünglichen Zustand versetzt wird! Die lokale Bereichsvariable wird auch nicht "unset" sein, aber das ist wahrscheinlich weniger ein Risiko: sie sind lokal für eine einzelne Regel.

Zusammenfassend: Ja, Sie haben recht, globale Bereiche und Member- / Instanzvariablen sind sich sehr ähnlich. Aber ich würde mich eher für Mitglieder-Variablen wegen der freundlicheren Syntax entscheiden.

    
Bart Kiers 16.05.2012, 10:21
quelle

Tags und Links