2016-09-05 1 views
1

g4:Comment obtenir les blancs sautés (jetons originaux sans sauter)?

grammar KBDP; 
WS: [\r\n \t] -> skip; 

VARNAME:[_a-zA-Z0-9]+; 
OP:[='*,.]; 
REALVAR:'@' VARNAME; 

prog:sqlsentece+; 
sqlsentece:'"' (VARNAME|OP|REALVAR)+'"'; 

sql originale:

"select * from myTables"

public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx) 
    { 
     ctx.getText(); 
    } 

ctx.getText() retourne les jetons blancs sautées

"select * from myTables"

.

Comment puis-je obtenir le sql d'origine "select * from myTables" (avec des blancs)?

Répondre

1

Chaque contexte d'analyse a un jeton de début et un jeton de fin qui pointent vers les jetons qui composent ce contexte. Un jeton a, entre autres propriétés, les index + fin, qui indiquent le décalage de caractère dans le flux source d'origine. Utilisez le CharStream associé et c'est getText (Interval (from, to)); méthode pour obtenir le texte original pour un contexte.

Exemple:

public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx) 
{ 
    CharStream cs = ctx.start.getTokenSource().getInputStream(); 
    String originalText = cs.getText(Interval.of(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); 
} 
+0

Puis-je vous d'afficher le code spécifique Je suis désolé de cette demande excessive, parce que je suis junior Java et Antlr4, je vous remercie beaucoup – MarkMa

+0

Je vous remercie? beaucoup pour votre aide :) – MarkMa

+0

@ MarkMa, si ma réponse vous a aidé alors s'il vous plaît l'accepter (la coche sur la gauche). Si vous trouvez que cela vaut la peine, vous pouvez également l'augmenter (la flèche vers le haut à gauche), ce qui me donne des points supplémentaires. –