我是一个完全的词法分析器和解析器新手,所以请耐心等待。最终我希望能够表达 LDAP 样式的查询字符串,例如 '(foo=bar)'、'(!foo=bar)'、'(&(foo=bar)(!zip=zap))' 并有一个最后的树,我可以用它来创建实际的数据库查询(或其他)
所以我想从最简单的形式开始,解析 (foo=bar) 和 (!foo=bar) 之类的表达式,但我已经有一些理解问题。我只想表示字段与值之间用'='分隔,但 ANTLR 似乎一次吃掉了所有字符,因为标识符看起来很像一个值。我该怎么做才能防止这种情况发生?
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');