languagetool-org/languagetool · error · SAXException
Only backward references in match elements are possible, tri
Error message
Only backward references in match elements are possible, tried to specify token " + refNumber + "\n Line: " + pLocator.getLineNumber() + ", column: " + pLocator.getColumnNumber() + ".
What it means
Error "Only backward references in match elements are possible, tried to specify token " + refNumber + "\n Line: " + pLocator.getLineNumber() + ", column: " + pLocator.getColumnNumber() + "." thrown in languagetool-org/languagetool.
Source
Thrown at languagetool-core/src/main/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleHandler.java:282
filterClassName = attrs.getValue("class");
filterArgs = attrs.getValue("args");
break;
case MARKER:
if (inMarker) {
throw new IllegalStateException("'<marker>' may not be nested in rule '" + id + "'");
}
example.append("<marker>");
if (inPattern || inAntiPattern) {
startPos = tokenCounter;
inMarker = true;
}
break;
}
}
private void refNumberSanityCheck(int refNumber) throws SAXException {
if (refNumber > patternTokens.size()) {
throw new SAXException("Only backward references in match elements are possible, tried to specify token "
+ refNumber + "\n Line: " + pLocator.getLineNumber()
+ ", column: " + pLocator.getColumnNumber() + ".");
}
}
@Override
public void endElement(String namespaceURI, String sName,
String qName) throws SAXException {
switch (qName) {
case RULE:
DisambiguationPatternRule rule = new DisambiguationPatternRule(id,
name, language, patternTokens, disambiguatedPOS, posSelector,
disambigAction);
endPositionCorrection = endPos - tokenCountForMarker;
if (startPos != -1 && endPos != -1) {
rule.setStartPositionCorrection(startPos);
rule.setEndPositionCorrection(endPositionCorrection);View on GitHub (pinned to 2e990059ce)
Solutions
- Change the token reference to point backwards (positive ref within the tokens seen so far)
- Fix the match no attribute in the rule XML so it references a previous token
- Restructure the rule pattern so the referenced token precedes the match element
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at languagetool-core/src/main/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleHandler.java:282 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06).
Data as JSON: /api/errors/dc8cb34ffdf1065a.
Report an issue: GitHub.