2016-07-21 4 views
0

Änderungen Java.g4prüfen, ob Verfahren hat einen Kommentar mit antlr

Anfang der Datei

grammar Java; 


@lexer::members { 
    public static final int WHITESPACE = 1; 
    public static final int COMMENTS = 2; 
} 

Ende der Datei in Buch als getan

// 
// Whitespace and comments 
// 

WS : [ \t\r\n\u000C]+ -> channel(WHITESPACE) ; // channel(1) 

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

LINE_COMMENT : '//' ~[\r\n]* -> channel(COMMENTS) ; // channel(2) 

Der Versuch, Kommentare und Leerzeichen auf verschiedene Kanäle senden "The Definitive ANTLR 4 Referenz" Kapitel 12.1 Broadcasting Tokens auf verschiedenen Kanälen

auf antlr4 Java.g4 folgende Fehler Ausführung sind

java org.antlr.v4.Tool Java.g4 
    warning(155): Java.g4:1017:35: rule WS contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output 
    warning(155): Java.g4:1019:40: rule COMMENT contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output 
    warning(155): Java.g4:1021:45: rule LINE_COMMENT contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output 

ich sehen, was nicht falsch dargestellt?

Antwort

2

Sie sollten das folgende Fragment ersetzen:

@lexer::members { 
    public static final int WHITESPACE = 1; 
    public static final int COMMENTS = 2; 
} 

mit string:

channels { WHITESPACE, COMMENTS } 
+0

fügt einen neuen Fehler hinzu [Fehler (164): Java.g4: 42: 0: benutzerdefinierte Kanäle werden in kombinierten Grammatiken nicht unterstützt] – nkvnkv

+0

In diesem Fall sollten Sie Lexer und Parser auf verschiedene Dateien trennen: JavaLexer und JavaParser. –

Verwandte Themen