{"record":{"id":"dc8cb34ffdf1065a","repo":"languagetool-org/languagetool","slug":"only-backward-references-in-match-elements-are-pos-dc8cb3","errorCode":null,"errorMessage":"Only backward references in match elements are possible, tried to specify token \" + refNumber + \"\\n Line: \" + pLocator.getLineNumber() + \", column: \" + pLocator.getColumnNumber() + \".","messagePattern":"Only backward references in match elements are possible, tried to specify token \" \\+ refNumber \\+ \"\\\\n Line: \" \\+ pLocator\\.getLineNumber\\(\\) \\+ \", column: \" \\+ pLocator\\.getColumnNumber\\(\\) \\+ \"\\.","errorType":"exception","errorClass":"SAXException","httpStatus":null,"severity":"error","filePath":"languagetool-core/src/main/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleHandler.java","lineNumber":282,"sourceCode":"        filterClassName = attrs.getValue(\"class\");\n        filterArgs = attrs.getValue(\"args\");\n        break;\n      case MARKER:\n        if (inMarker) {\n          throw new IllegalStateException(\"'<marker>' may not be nested in rule '\" + id + \"'\");\n        }\n        example.append(\"<marker>\");\n        if (inPattern || inAntiPattern) {\n          startPos = tokenCounter;\n          inMarker = true;\n        }\n        break;\n    }\n  }\n\n  private void refNumberSanityCheck(int refNumber) throws SAXException {\n    if (refNumber > patternTokens.size()) {\n      throw new SAXException(\"Only backward references in match elements are possible, tried to specify token \"\n              + refNumber + \"\\n Line: \" + pLocator.getLineNumber()\n              + \", column: \" + pLocator.getColumnNumber() + \".\");\n    }\n  }\n\n  @Override\n  public void endElement(String namespaceURI, String sName,\n                         String qName) throws SAXException {\n    switch (qName) {\n      case RULE:\n        DisambiguationPatternRule rule = new DisambiguationPatternRule(id,\n                name, language, patternTokens, disambiguatedPOS, posSelector,\n                disambigAction);\n\n        endPositionCorrection = endPos - tokenCountForMarker;\n        if (startPos != -1 && endPos != -1) {\n          rule.setStartPositionCorrection(startPos);\n          rule.setEndPositionCorrection(endPositionCorrection);","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-core/src/main/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleHandler.java#L264-L300","documentation":"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.","triggerScenarios":"Thrown at languagetool-core/src/main/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleHandler.java:282 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}