2016-05-03 8 views
-1

Ist es möglich, default Kontextobjekt zu generieren?antlr4 - Standardkontextobjekt

Giving folgende vereinfachte Grammatik

class { 
    method* constructor? 
} 

und analysiert Text:

SomeClass { 
} 

ist es möglich, die Eingabe von Text zu machen antlr zu interpretieren, als ob es ein Konstruktor war?

Ich könnte einige Hacks in der Klassenkontext-Listener, um Konstruktor hinzuzufügen, aber es scheint sehr chaotisch. Ich frage mich, ob es eine Möglichkeit gibt, Standard "text" zu generieren, wenn das Kontextobjekt nicht auf der niedrigsten möglichen Ebene bereitgestellt wird.

Antwort

0

Lernen Basticks Antlr. Es gibt einen von ANTLR generierten Listener namens (Grammatikname) BaseListener mit Methode enter (rulename) oder exit (rulename). Ich denke, es ist nicht zu beanstanden, wenn die Methoden aufgerufen werden. Sie können die Methoden überschreiben, um beliebige Aktionen auszuführen, indem Sie beispielsweise einen Konstruktor aufrufen, wenn eine Konstruktorregel vorhanden ist. Fügen Sie diesen Listener dann zum Parcter hinzu.

+0

Wenn kein Konstruktor vorhanden ist, wird kein Listener aufgerufen. Das ist es, was mein Punkt ist. Wie man antlr dazu bringt, Standardkontextobjekte hinzuzufügen (an Stellen, an denen sie nicht explizit spezifiziert sind), BEVOR der Syntaxbaum gebaut wird. – user3364192

+1

Es ist keine normale Verwendung. Sie können die Kontextinstanzen nicht manuell erstellen oder erstellen. Danke für -1 –