Uzyskaj dostęp do kanałów w ANTLR 4 i przeanalizuj je oddzielnie

Moje komentarze umieściłem na osobnym kanale w ANTLR 4. W moim przypadku jest to kanał 2.

To jest moja gramatyka leksykalna.

COMMENT: '/*' .*? '*/' -> channel(2) 
       ;

Chcę uzyskać dostęp do tego kanału 2 i wykonać analizę tego kanału, aby zgromadzić komentarze. Tak więc uwzględniłem to w analizie gramatyki jak poniżej

comment
:COMMENT
;

W programie

        string s = " paring string"
        AntlrInputStream input = new AntlrInputStream(s);
        CSSLexer lexer = new CSSLexer(input); 

        CommonTokenStream tokens = new CommonTokenStream(lexer,2);

Następnie chcę wykonać parsowanie żetonów

var xr = parser.comment().GetRuleContexts<CommentContext>();

ponieważ chcę uzyskać informacje z obiektu CommentContext, takiego jakStart.Column itp.

EDYTOWAĆ:

To jest ulepszone pytanie

Mówiąc dokładniej, chcę pobrać wszystkie tokeny w kanale 2 i przeanalizować je za pomocą gramatyki komentarzy, aby uzyskać wszystkie komentarze do listy (IReadOnly<CommentContext>), abym mógł iterować przez każdą z nich i uzyskać dostęp do informacji, takich jak linia początkowa, kolumna początkowa, kolumna końca linii końcowej i tekst tokenu.

CommonTokenStream tokens = new CommonTokenStream(lexer,2);

To nie daje mi tokenów w kanale 2. I jeszcze jedna rzecz, którą odkryłem, dopóki te tokeny nie są przekazywane jako argumenty do konstrukcji parseraXParser parser = new XParser(tokens);

Wtedy tylko mogę uzyskać dostęp do żetonów, dzwoniącGetTokens().W tokach widzę, że są komentarze oznaczone jako żetony i znajdują się na kanale 2. Mimo toCommentTokenStrem gatunek numeru kanału jak powyżej. zawiera wszystkie żetony.

Jaki jest powód, dla którego nie można uzyskać dostępu do tokenów, dopóki obiekt parsera nie zostanie utworzony przy użyciu tokenów?

Chcę dostaćCommentTokenStrem w kanale 2 i przeprowadź tworzenie obiektu XParser, aby przeanalizować te tokeny za pomocą mojegocomment gramatyka. Jak najlepiej to zrobić w interfejsie API ANTLR 4?

questionAnswers(4)

yourAnswerToTheQuestion