axisSpecifier
: AxisName '::'
- | '@'?
+ | AT?
;
nodeTest: nameTest
: primaryExpr predicate*
;
-orExpr : andExpr ('or' andExpr)*
+orExpr : andExpr (OR andExpr)*
;
-andExpr : equalityExpr ('and' equalityExpr)*
+andExpr : equalityExpr (AND equalityExpr)*
;
equalityExpr
;
multiplicativeExpr
- : unaryExprNoRoot (('*'|'div'|'mod') multiplicativeExpr)?
- | '/' (('div'|'mod') multiplicativeExpr)?
+ : unaryExprNoRoot (('*'|DIV|MOD) multiplicativeExpr)?
+ | '/' ((DIV|MOD) multiplicativeExpr)?
;
unaryExprNoRoot
: nCName ':' nCName
| NCName
| AxisName
+ | AND
+ | OR
+ | DIV
+ | MOD
;
variableReference
nCName : NCName
| AxisName
| NodeType
+ | AND
+ | OR
+ | DIV
+ | MOD
;
NodeType: 'comment'
: '\'';
QUOT
: '"';
+ AND
+ : 'and';
+ OR
+ : 'or';
+ DIV
+ : 'div';
+ MOD
+ : 'mod';
+
Literal : '"' ~'"'* '"'
| '\'' ~'\''* '\''
import static org.junit.Assert.assertEquals;
import com.google.common.collect.ImmutableBiMap;
+import java.util.List;
import javax.xml.xpath.XPathExpressionException;
import org.eclipse.jdt.annotation.Nullable;
import org.junit.Before;
import org.opendaylight.yangtools.yang.xpath.api.YangBooleanConstantExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangExpr;
import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath;
+import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath.Relative;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathAxis;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathMode;
YangXPathAxis.CHILD.asStep(QName.create(DEFNS, "lower-port"))), binary.getRightExpr());
}
+ @Test
+ public void testAnd() throws XPathExpressionException {
+ assertRelative("and");
+ assertRelative("or");
+ assertRelative("div");
+ assertRelative("mod");
+ assertRelative("andor");
+ }
+
+ private void assertRelative(final String str) throws XPathExpressionException {
+ final YangExpr expr = parseExpr(str);
+ assertThat(expr, isA(Relative.class));
+ assertEquals(List.of(YangXPathAxis.CHILD.asStep(QName.create(DEFNS, str))), ((Relative) expr).getSteps());
+ }
+
private YangExpr parseExpr(final String xpath) throws XPathExpressionException {
return parser.parseExpression(xpath).getRootExpr();
}