{"record":{"id":"0b4e3d068fab934e","repo":"antlr/antlr4","slug":"invalid-tag-tagchunk-gettag-in-pattern-p","errorCode":null,"errorMessage":"invalid tag: \"+tagChunk.getTag()+\" in pattern: \"+pattern","messagePattern":"invalid tag: \"\\+tagChunk\\.getTag\\(\\)\\+\" in pattern: \"\\+pattern","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"runtime/Java/src/org/antlr/v4/runtime/tree/pattern/ParseTreePatternMatcher.java","lineNumber":392,"sourceCode":"\t\t\t\t// add special rule token or conjure up new token from name\n\t\t\t\tif ( Character.isUpperCase(tagChunk.getTag().charAt(0)) ) {\n\t\t\t\t\tInteger ttype = parser.getTokenType(tagChunk.getTag());\n\t\t\t\t\tif ( ttype==Token.INVALID_TYPE ) {\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Unknown token \"+tagChunk.getTag()+\" in pattern: \"+pattern);\n\t\t\t\t\t}\n\t\t\t\t\tTokenTagToken t = new TokenTagToken(tagChunk.getTag(), ttype, tagChunk.getLabel());\n\t\t\t\t\ttokens.add(t);\n\t\t\t\t}\n\t\t\t\telse if ( Character.isLowerCase(tagChunk.getTag().charAt(0)) ) {\n\t\t\t\t\tint ruleIndex = parser.getRuleIndex(tagChunk.getTag());\n\t\t\t\t\tif ( ruleIndex==-1 ) {\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Unknown rule \"+tagChunk.getTag()+\" in pattern: \"+pattern);\n\t\t\t\t\t}\n\t\t\t\t\tint ruleImaginaryTokenType = parser.getATNWithBypassAlts().ruleToTokenType[ruleIndex];\n\t\t\t\t\ttokens.add(new RuleTagToken(tagChunk.getTag(), ruleImaginaryTokenType, tagChunk.getLabel()));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new IllegalArgumentException(\"invalid tag: \"+tagChunk.getTag()+\" in pattern: \"+pattern);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tTextChunk textChunk = (TextChunk)chunk;\n\t\t\t\tANTLRInputStream in = new ANTLRInputStream(textChunk.getText());\n\t\t\t\tlexer.setInputStream(in);\n\t\t\t\tToken t = lexer.nextToken();\n\t\t\t\twhile ( t.getType()!=Token.EOF ) {\n\t\t\t\t\ttokens.add(t);\n\t\t\t\t\tt = lexer.nextToken();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n//\t\tSystem.out.println(\"tokens=\"+tokens);\n\t\treturn tokens;\n\t}\n","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/antlr/antlr4/blob/7d5770395bb7b02eb56e7c62662cb1d7c08f42a3/runtime/Java/src/org/antlr/v4/runtime/tree/pattern/ParseTreePatternMatcher.java#L374-L410","documentation":"Error \"invalid tag: \"+tagChunk.getTag()+\" in pattern: \"+pattern\" thrown in antlr/antlr4.","triggerScenarios":"A tag chunk has an invalid form (e.g. bad label/rule combination) in the pattern.","commonSituations":"Use tags of form <rule>, <token>, or <label:rule>; avoid malformed multi-part tags.","solutions":["A tag must be either a valid rule name or a valid token name; fix the tag text inside the delimiters.","If the tag contains special characters, escape them or choose a different delimiter pair via setDelimiters."],"exampleFix":"// instead of an invalid tag like <foo-bar>, use the rule name\nParseTreePattern p = matcher.compile(\"<fooBar>\", MyParser.RULE_fooBar);","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7d5770395bb7b02eb56e7c62662cb1d7c08f42a3","analyzedAt":"2026-08-14T14:47:56.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}