// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/Expression.java
// public interface Expression<T> {
// 
//     public <V> V accept(ExpressionVisitor<V> visitor);
//     public T evaluate(Object object);
// }
// 
// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/FieldPathExpression.java
// public class FieldPathExpression implements Expression<Object> {
// 
//     private final String fieldPath;
// 
//     public FieldPathExpression(String fieldPath) {
//         this.fieldPath = fieldPath;
//     }
// 
//     public String getFieldPath() {
//         return fieldPath;
//     }
// 
//     @Override
//     public <T> T accept(ExpressionVisitor<T> visitor) {
//         return visitor.visit(this);
//     }
// 
//     @Override
//     public Object evaluate(Object object) {
//         try {
//             if (object instanceof ManagedObject) {
//                 return ((ManagedObject)object).getValue(fieldPath);
//             } else {
//                 Field field = object.getClass().getDeclaredField(fieldPath);
//                 field.setAccessible(true);
//                 return field.get(object);
//             }
//         } catch (Exception e) {
//             throw new RuntimeException(e);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return fieldPath;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         FieldPathExpression that = (FieldPathExpression) o;
// 
//         if (!fieldPath.equals(that.fieldPath)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return fieldPath.hashCode();
//     }
// }
// 
// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/parser/PredicateParser.java
// public static enum TokenType {
//     AND,
//     OR,
//     OPEN_PAREN,
//     CLOSE_PAREN,
//     EQUAL,
//     GREATER_THAN_OR_EQUAL,
//     LESS_THAN_OR_EQUAL,
//     NOT_EQUAL,
//     GREATER_THAN,
//     LESS_THAN,
//     FIELD_NAME,
//     CONSTANT,
//     EOF
// }


import com.github.dkharrat.nexusdata.predicate.Expression;
import com.github.dkharrat.nexusdata.predicate.FieldPathExpression;
import static com.github.dkharrat.nexusdata.predicate.parser.PredicateParser.TokenType;
package com.github.dkharrat.nexusdata.predicate.parser;


class NameParselet implements PrefixParselet<TokenType,Expression<?>> {
    public Expression<?> parse(Parser<TokenType,Expression<?>> parser, Token<TokenType> token) {
// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/Expression.java
// public interface Expression<T> {
// 
//     public <V> V accept(ExpressionVisitor<V> visitor);
//     public T evaluate(Object object);
// }
// 
// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/FieldPathExpression.java
// public class FieldPathExpression implements Expression<Object> {
// 
//     private final String fieldPath;
// 
//     public FieldPathExpression(String fieldPath) {
//         this.fieldPath = fieldPath;
//     }
// 
//     public String getFieldPath() {
//         return fieldPath;
//     }
// 
//     @Override
//     public <T> T accept(ExpressionVisitor<T> visitor) {
//         return visitor.visit(this);
//     }
// 
//     @Override
//     public Object evaluate(Object object) {
//         try {
//             if (object instanceof ManagedObject) {
//                 return ((ManagedObject)object).getValue(fieldPath);
//             } else {
//                 Field field = object.getClass().getDeclaredField(fieldPath);
//                 field.setAccessible(true);
//                 return field.get(object);
//             }
//         } catch (Exception e) {
//             throw new RuntimeException(e);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return fieldPath;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         FieldPathExpression that = (FieldPathExpression) o;
// 
//         if (!fieldPath.equals(that.fieldPath)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return fieldPath.hashCode();
//     }
// }
// 
// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/parser/PredicateParser.java
// public static enum TokenType {
//     AND,
//     OR,
//     OPEN_PAREN,
//     CLOSE_PAREN,
//     EQUAL,
//     GREATER_THAN_OR_EQUAL,
//     LESS_THAN_OR_EQUAL,
//     NOT_EQUAL,
//     GREATER_THAN,
//     LESS_THAN,
//     FIELD_NAME,
//     CONSTANT,
//     EOF
// }


// Path: nexusdata/src/main/java/com/github/dkharrat/nexusdata/predicate/parser/NameParselet.java
import com.github.dkharrat.nexusdata.predicate.Expression;
import com.github.dkharrat.nexusdata.predicate.FieldPathExpression;
import static com.github.dkharrat.nexusdata.predicate.parser.PredicateParser.TokenType;

package com.github.dkharrat.nexusdata.predicate.parser;


class NameParselet implements PrefixParselet<TokenType,Expression<?>> {
    public Expression<?> parse(Parser<TokenType,Expression<?>> parser, Token<TokenType> token) {
        return new FieldPathExpression(token.getText());