Derzeit bin ich mit dieser ANTLR4 Grammatik (Teil), um strings
und numbers
zu erhalten:ANTLR4 -> prüfen eine wörtliche ist string_literal oder ein NUMBER_LITERAL
Go figure diese zusammengefasst Grammatik:
gramm
: expr SCOL
;
expr
: literal #LiteralExpression
;
literal
: NUMERIC_LITERAL
| STRING_LITERAL
;
NUMERIC_LITERAL
: DIGIT+ ('.' DIGIT*)? (E [-+]? DIGIT+)?
| '.' DIGIT+ (E [-+]? DIGIT+)?
;
STRING_LITERAL
: '\'' (~'\'' | '\'\'')* '\''
;
SPACES
: [ \u000B\t\r\n] -> channel(HIDDEN)
;
fragment DIGIT : [0-9];
Also implementiere ich eine GrammBaseVisitor<Void>
.
Ich bin nicht ganz herauszufinden, wie Sie überprüfen, ob ein Literal ist NUMERIC_LITERAL
oder STRING_LITERAL
.
Was ich in der Lage gewesen zu bekommen, habe ich außer Kraft setzen visitLiteral()
und visitLiteralExpression()
:
@Override
public Void visitLiteral(LiteralContext ctx) {
// TODO What should I do here in order to check whether
// ctx contains an STRING_LITERAL or a NUMBER_LITERAL?
return super.visitLiteral(ctx);
}
@Override
public Void visitLiteralExpression(LiteralExpressionContext ctx) {
return super.visitLiteralExpression(ctx);
}
Was ist der Unterschied zwischen visitLiteral
und visitLiteralExpression()
ist?