locationPath
relativeLocationPath
absoluteLocationPath
absoluteLocationPath
'/'
$$ = PyObject_CallFunction(ParsedAbsoluteLocationPath, "O", Py_None);
$$ = ParsedAbsoluteLocationPath(None)
'/'
relativeLocationPath
$$ = PyObject_CallFunction(ParsedAbsoluteLocationPath, "O", $2);
$$ = ParsedAbsoluteLocationPath($2)
abbreviatedAbsoluteLocationPath
relativeLocationPath
step
relativeLocationPath
'/'
step
$$ = PyObject_CallFunction(ParsedRelativeLocationPath, "OO", $1, $3);
$$ = ParsedRelativeLocationPath($1, $3)
abbreviatedRelativeLocationPath
step
axisSpecifier
nodeTest
$$ = PyObject_CallFunction(ParsedStep, "OO", $1, $2);
$$ = ParsedStep($1, $2)
axisSpecifier
nodeTest
predicateList
$$ = PyObject_CallFunction(ParsedStep, "OOO", $1, $2, $3);
$$ = ParsedStep($1, $2, $3)
abbreviatedStep
predicateList
predicate
PyObject *pred_list = PyList_New(1);
/* Steals a reference */
PyList_SET_ITEM(pred_list, 0, $1);
Py_INCREF($1);
$$ = PyObject_CallFunction(ParsedPredicateList, "O", pred_list);
Py_DECREF(pred_list);
$$ = ParsedPredicateList([$1])
predicateList
predicate
PyObject_CallMethod($1, "append", "O", $2);
Py_INCREF($1);
$$ = $1;
$1.append($2)
$$ = $1
axisSpecifier
AXIS_NAME
DOUBLE_COLON
$$ = PyObject_CallFunction(ParsedAxisSpecifier, "O", $1);
$$ = ParsedAxisSpecifier($1)
abbreviatedAxisSpecifier
nodeTest
WILDCARD_NAME
$$ = PyObject_CallFunction(ParsedNameTest, "O", $1);
$$ = ParsedNameTest($1)
NODE_TYPE
'('
')'
$$ = PyObject_CallFunction(ParsedNodeTest, "O", $1);
$$ = ParsedNodeTest($1)
NODE_TYPE
'('
LITERAL
')'
$$ = PyObject_CallFunction(ParsedNodeTest, "OO", $1, $3);
$$ = ParsedNodeTest($1, $3)
predicate
'['
predicateExpr
']'
Py_INCREF($2);
$$ = $2;
$$ = $2
predicateExpr
expr
abbreviatedAbsoluteLocationPath
DOUBLE_SLASH
relativeLocationPath
$$ = PyObject_CallFunction(ParsedAbbreviatedAbsoluteLocationPath,
"O", $2);
$$ = ParsedAbbreviatedAbsoluteLocationPath($2)
abbreviatedRelativeLocationPath
relativeLocationPath
DOUBLE_SLASH
step
$$ = PyObject_CallFunction(ParsedAbbreviatedRelativeLocationPath,
"OO", $1, $3);
$$ = ParsedAbbreviatedRelativeLocationPath($1, $3)
abbreviatedStep
'.'
$$ = PyObject_CallFunction(ParsedAbbreviatedStep, "i", 0);
$$ = ParsedAbbreviatedStep(0)
DOUBLE_DOT
$$ = PyObject_CallFunction(ParsedAbbreviatedStep, "i", 1);
$$ = ParsedAbbreviatedStep(1)
abbreviatedAxisSpecifier
'@'
$$ = PyObject_CallFunction(ParsedAxisSpecifier, "s", "attribute");
$$ = ParsedAxisSpecifier("attribute")
$$ = PyObject_CallFunction(ParsedAxisSpecifier, "s", "child");
$$ = ParsedAxisSpecifier("child")
expr
orExpr
primaryExpr
VARIABLE_REFERENCE
$$ = PyObject_CallFunction(ParsedVariableReferenceExpr, "O", $1);
$$ = ParsedVariableReferenceExpr($1)
'('
expr
')'
$$ = $2;
Py_INCREF($2);
$$ = $2
LITERAL
$$ = PyObject_CallFunction(ParsedLiteralExpr, "O", $1);
$$ = ParsedLiteralExpr($1)
NLITERAL
$$ = PyObject_CallFunction(ParsedNLiteralExpr, "O", $1);
$$ = ParsedNLiteralExpr($1)
functionCall
functionCall
FUNCTION_NAME
'('
')'
PyObject *arg_list = PyList_New(0);
$$ = PyObject_CallFunction(ParsedFunctionCallExpr, "OO", $1, arg_list);
Py_DECREF(arg_list);
$$ = ParsedFunctionCallExpr($1, [])
FUNCTION_NAME
'('
argumentList
')'
$$ = PyObject_CallFunction(ParsedFunctionCallExpr, "OO", $1, $3);
$$ = ParsedFunctionCallExpr($1, $3)
argumentList
argument
$$ = PyList_New(1);
/* Steals a reference */
PyList_SET_ITEM($$, 0, $1);
Py_INCREF($1);
$$ = [$1]
argumentList
','
argument
PyList_Append($1, $3);
Py_INCREF($1);
$$ = $1;
$1.append($3)
$$ = $1
argument
expr
unionExpr
pathExpr
unionExpr
'|'
pathExpr
$$ = PyObject_CallFunction(ParsedUnionExpr, "OO", $1, $3);
$$ = ParsedUnionExpr($1, $3)
pathExpr
locationPath
filterExpr
filterExpr
'/'
relativeLocationPath
$$ = PyObject_CallFunction(ParsedPathExpr, "iOO", 0, $1, $3);
$$ = ParsedPathExpr($2, $1, $3)
filterExpr
DOUBLE_SLASH
relativeLocationPath
$$ = PyObject_CallFunction(ParsedPathExpr, "iOO", 1, $1, $3);
$$ = ParsedPathExpr($2, $1, $3)
filterExpr
primaryExpr
primaryExpr
predicateList
$$ = PyObject_CallFunction(ParsedFilterExpr, "OO", $1, $2);
$$ = ParsedFilterExpr($1, $2)
orExpr
andExpr
orExpr
OR
andExpr
$$ = PyObject_CallFunction(ParsedOrExpr, "OO", $1, $3);
$$ = ParsedOrExpr($1, $3)
andExpr
equalityExpr
andExpr
AND
equalityExpr
$$ = PyObject_CallFunction(ParsedAndExpr, "OO", $1, $3);
$$ = ParsedAndExpr($1, $3)
equalityExpr
relationalExpr
equalityExpr
EQUALITY_OP
relationalExpr
$$ = PyObject_CallFunction(ParsedEqualityExpr, "OOO", $2, $1, $3);
$$ = ParsedEqualityExpr($2, $1, $3)
relationalExpr
additiveExpr
relationalExpr
RELATIONAL_OP
additiveExpr
char *op = PyString_AsString($2);
if (op[0] == '<') {
if (op[1] == '=') {
/* less than or equal to */
$$ = PyObject_CallFunction(ParsedRelationalExpr, "lOO", 1, $1, $3);
} else {
/* less than */
$$ = PyObject_CallFunction(ParsedRelationalExpr, "lOO", 0, $1, $3);
}
} else if (op[1] == '=') {
/* greater than or equal to */
$$ = PyObject_CallFunction(ParsedRelationalExpr, "lOO", 3, $1, $3);
} else {
/* greater than */
$$ = PyObject_CallFunction(ParsedRelationalExpr, "lOO", 2, $1, $3);
}
ops = {'<' : 0,
'>' : 2,
'<=' : 1,
'>=' : 3,
}
$$ = ParsedRelationalExpr(ops[$2], $1, $3)
additiveExpr
multiplicativeExpr
additiveExpr
'+'
multiplicativeExpr
$$ = PyObject_CallFunction(ParsedAdditiveExpr, "iOO", 1, $1, $3);
$$ = ParsedAdditiveExpr(1, $1, $3)
additiveExpr
'-'
multiplicativeExpr
$$ = PyObject_CallFunction(ParsedAdditiveExpr, "iOO", -1, $1, $3);
$$ = ParsedAdditiveExpr(-1, $1, $3)
multiplicativeExpr
unaryExpr
multiplicativeExpr
MULTIPLY_OPERATOR
unaryExpr
char *op = PyString_AsString($2);
switch (*op) {
case '*': {
$$ = PyObject_CallFunction(ParsedMultiplicativeExpr, "lOO", 0, $1, $3);
break;
}
case 'd': {
$$ = PyObject_CallFunction(ParsedMultiplicativeExpr, "lOO", 1, $1, $3);
break;
}
case 'm': {
$$ = PyObject_CallFunction(ParsedMultiplicativeExpr, "lOO", 2, $1, $3);
break;
}
}
ops = {'*' : 0,
'div' : 1,
'mod' : 2,
}
$$ = ParsedMultiplicativeExpr(ops[$2], $1, $3)
unaryExpr
unionExpr
'-'
unionExpr
$$ = PyObject_CallFunction(ParsedUnaryExpr, "O", $2);
$$ = ParsedUnaryExpr($2)