Ich bin ein totaler Lexer und Parser Neuling, also bitte etwas Geduld. Schließlich möchte ich in der Lage sein, LDAP-Stil-Abfragezeichenfolgen auszudrücken, z. '(foo = bar)', '(! foo = bar)', '(& (foo = bar) (! zip = zap))' und habe am Ende einen Baum, mit dem ich die eigentliche Datenbankabfrage erstellen konnte (oder was auch immer)ANTLR (Feld = Wert), wie drückt man das aus?
Also dachte ich, mit der einfachsten Form zu beginnen, um Ausdrücke wie (foo = bar) und (! foo = bar) zu parsen, aber ich habe schon einige Probleme zu verstehen. Ich möchte nur ausdrücken, dass die Felder durch ein '=' vom Wert getrennt sind, aber ANTLR scheint alle Zeichen auf einmal zu essen, weil der Identifizierer viel wie ein Wert aussieht. Was muss ich tun, um dies zu verhindern?
grammar FilterExpression;
options
{
language=Java;
k=2;
}
tokens
{
NOT='!';
}
term : '(' NOT? FIELD '=' VALUE ')';
// lexer
FIELD : NAME;
VALUE : CDATA;
fragment NAME
: ALPHA+;
fragment CDATA
: ALPHA*;
fragment ALPHA
: ('a'..'z' | 'A'..'Z');