diff --git a/tool/src/org/antlr/v4/tool/ErrorType.java b/tool/src/org/antlr/v4/tool/ErrorType.java index 4e7222754..451a03a41 100644 --- a/tool/src/org/antlr/v4/tool/ErrorType.java +++ b/tool/src/org/antlr/v4/tool/ErrorType.java @@ -30,6 +30,7 @@ package org.antlr.v4.tool; import org.antlr.v4.Tool; +import org.antlr.v4.runtime.Lexer; /** * A complex enumeration of all the error messages that the tool can issue. @@ -42,97 +43,577 @@ import org.antlr.v4.Tool; * @since 4.0 */ public enum ErrorType { - // Tool errors + /* + * Tool errors + */ + + /** + * Compiler Error 1. + * + *

cannot write file 'filename': reason

+ */ CANNOT_WRITE_FILE(1, "cannot write file '': ", ErrorSeverity.ERROR), + /** + * Compiler Error 2. + * + *

unknown command-line option 'option'

+ */ INVALID_CMDLINE_ARG(2, "unknown command-line option ''", ErrorSeverity.ERROR), + /** + * Compiler Error 3. + * + *

cannot find tokens file 'filename'

+ */ CANNOT_FIND_TOKENS_FILE(3, "cannot find tokens file ''", ErrorSeverity.ERROR), + /** + * Compiler Error 4. + * + *

cannot find tokens file 'filename': reason

+ */ ERROR_READING_TOKENS_FILE(4, "cannot find tokens file '': ", ErrorSeverity.ERROR), + /** + * Compiler Error 5. + * + *

directory not found: directory

+ */ DIR_NOT_FOUND(5, "directory not found: ", ErrorSeverity.ERROR), + /** + * Compiler Error 6. + * + *

output directory is a file: filename

+ */ OUTPUT_DIR_IS_FILE(6, "output directory is a file: ", ErrorSeverity.ERROR), + /** + * Compiler Error 7. + * + *

cannot find or open file: filename

+ */ CANNOT_OPEN_FILE(7, "cannot find or open file: ; reason: ", ErrorSeverity.ERROR), + /** + * Compiler Error 8. + * + *

+ * grammar name 'name' and file name 'filename' differ

+ */ FILE_AND_GRAMMAR_NAME_DIFFER(8, "grammar name '' and file name '' differ", ErrorSeverity.ERROR), + /** + * Compiler Error 9. + * + *

invalid {@code -Dname=value} syntax: 'syntax'

+ */ BAD_OPTION_SET_SYNTAX(9, "invalid -Dname=value syntax: ''", ErrorSeverity.ERROR), + /** + * Compiler Error 10. + * + *

warning treated as error

+ */ WARNING_TREATED_AS_ERROR(10, "warning treated as error", ErrorSeverity.ERROR_ONE_OFF), + /** + * Compiler Error 20. + * + *

internal error: message

+ */ INTERNAL_ERROR(20, "internal error: : " + "", ErrorSeverity.ERROR), + /** + * Compiler Error 21. + * + *

.tokens file syntax error filename: message

+ */ TOKENS_FILE_SYNTAX_ERROR(21, ".tokens file syntax error :", ErrorSeverity.ERROR), + /** + * Compiler Warning 22. + * + *

template error: message

+ */ STRING_TEMPLATE_WARNING(22, "template error: : " + "", ErrorSeverity.WARNING), - // Code generation errors + /* + * Code generation errors + */ + + /** + * Compiler Error 30. + * + *

can't find code generation templates: group

+ */ MISSING_CODE_GEN_TEMPLATES(30, "can't find code generation templates: ", ErrorSeverity.ERROR), + /** + * Compiler Error 31. + * + *

+ * ANTLR cannot generate 'language' code as of version + * version

+ */ CANNOT_CREATE_TARGET_GENERATOR(31, "ANTLR cannot generate '' code as of version "+ Tool.VERSION, ErrorSeverity.ERROR), + /** + * Compiler Error 32. + * + *

+ * code generation template 'template' has missing, misnamed, or + * incomplete arg list; missing 'field'

+ */ CODE_TEMPLATE_ARG_ISSUE(32, "code generation template '' has missing, misnamed, or incomplete arg list; missing ''", ErrorSeverity.ERROR), + /** + * Compiler Error 33. + * + *

missing code generation template 'template'

+ */ CODE_GEN_TEMPLATES_INCOMPLETE(33, "missing code generation template ''", ErrorSeverity.ERROR), + /** + * Compiler Error 34. + * + *

+ * no mapping to template name for output model class 'class'

+ */ NO_MODEL_TO_TEMPLATE_MAPPING(34, "no mapping to template name for output model class ''", ErrorSeverity.ERROR), - // Grammar errors + /* + * Grammar errors + */ + + /** + * Compiler Error 50. + * + *

syntax error: message

+ */ SYNTAX_ERROR(50, "syntax error: ", ErrorSeverity.ERROR), + /** + * Compiler Error 51. + * + *

rule 'rule' redefinition; previous at line line

+ */ RULE_REDEFINITION(51, "rule '' redefinition; previous at line ", ErrorSeverity.ERROR), + /** + * Compiler Error 52. + * + *

lexer rule 'rule' not allowed in parser

+ */ LEXER_RULES_NOT_ALLOWED(52, "lexer rule '' not allowed in parser", ErrorSeverity.ERROR), + /** + * Compiler Error 53. + * + *

parser rule 'rule' not allowed in lexer

+ */ PARSER_RULES_NOT_ALLOWED(53, "parser rule '' not allowed in lexer", ErrorSeverity.ERROR), - REPEATED_PREQUEL(54, "repeated grammar prequel spec (option, token, or import); please merge", ErrorSeverity.ERROR), + /** + * Compiler Error 54. + * + *

+ * repeated grammar prequel spec ({@code options}, {@code tokens}, or + * {@code import}); please merge

+ */ + REPEATED_PREQUEL(54, "repeated grammar prequel spec (options, tokens, or import); please merge", ErrorSeverity.ERROR), + /** + * Compiler Error 56. + * + *

reference to undefined rule: rule

+ */ UNDEFINED_RULE_REF(56, "reference to undefined rule: ", ErrorSeverity.ERROR), + /** + * Compiler Error 57. + * + *

+ * reference to undefined rule 'rule' in non-local ref + * 'reference'

+ */ UNDEFINED_RULE_IN_NONLOCAL_REF(57, "reference to undefined rule '' in non-local ref ''", ErrorSeverity.ERROR), + /** + * Compiler Error 60. + * + *

token names must start with an uppercase letter: name

+ */ TOKEN_NAMES_MUST_START_UPPER(60, "token names must start with an uppercase letter: ", ErrorSeverity.ERROR), + /** + * Compiler Error 63. + * + *

+ * unknown attribute reference 'attribute' in + * 'expression'

+ */ UNKNOWN_SIMPLE_ATTRIBUTE(63, "unknown attribute reference '' in ''", ErrorSeverity.ERROR), + /** + * Compiler Error 64. + * + *

+ * parameter 'parameter' of rule 'rule' is not accessible + * in this scope: expression

+ */ INVALID_RULE_PARAMETER_REF(64, "parameter '' of rule '' is not accessible in this scope: ", ErrorSeverity.ERROR), + /** + * Compiler Error 65. + * + *

+ * unknown attribute 'attribute' for rule 'rule' in + * 'expression'

+ */ UNKNOWN_RULE_ATTRIBUTE(65, "unknown attribute '' for rule '' in ''", ErrorSeverity.ERROR), + /** + * Compiler Error 66. + * + *

+ * attribute 'attribute' isn't a valid property in + * 'expression'

+ */ UNKNOWN_ATTRIBUTE_IN_SCOPE(66, "attribute '' isn't a valid property in ''", ErrorSeverity.ERROR), + /** + * Compiler Error 67. + * + *

+ * missing attribute access on rule reference 'rule' in + * 'expression'

+ */ ISOLATED_RULE_REF(67, "missing attribute access on rule reference '' in ''", ErrorSeverity.ERROR), + /** + * Compiler Error 69. + * + *

label 'label' conflicts with rule with same name

+ */ LABEL_CONFLICTS_WITH_RULE(69, "label '' conflicts with rule with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 70. + * + *

label 'label' conflicts with token with same name

+ */ LABEL_CONFLICTS_WITH_TOKEN(70, "label '' conflicts with token with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 72. + * + *

label 'label' conflicts with parameter with same name

+ */ LABEL_CONFLICTS_WITH_ARG(72, "label '' conflicts with parameter with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 73. + * + *

label 'label' conflicts with return value with same name

+ */ LABEL_CONFLICTS_WITH_RETVAL(73, "label '' conflicts with return value with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 74. + * + *

label 'label' conflicts with local with same name

+ */ LABEL_CONFLICTS_WITH_LOCAL(74, "label '' conflicts with local with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 75. + * + *

+ * label 'label' type mismatch with previous definition: + * message

+ */ LABEL_TYPE_CONFLICT(75, "label '' type mismatch with previous definition: ", ErrorSeverity.ERROR), + /** + * Compiler Error 76. + * + *

+ * return value 'name' conflicts with parameter with same name

+ */ RETVAL_CONFLICTS_WITH_ARG(76, "return value '' conflicts with parameter with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 79. + * + *

missing arguments(s) on rule reference: rule

+ */ MISSING_RULE_ARGS(79, "missing arguments(s) on rule reference: ", ErrorSeverity.ERROR), + /** + * Compiler Error 80. + * + *

rule 'rule' has no defined parameters

+ */ RULE_HAS_NO_ARGS(80, "rule '' has no defined parameters", ErrorSeverity.ERROR), + /** + * Compiler Warning 83. + * + *

unsupported option 'option'

+ */ ILLEGAL_OPTION(83, "unsupported option ''", ErrorSeverity.WARNING), + /** + * Compiler Warning 84. + * + *

unsupported option value 'name=value'

+ */ ILLEGAL_OPTION_VALUE(84, "unsupported option value '='", ErrorSeverity.WARNING), + /** + * Compiler Error 94. + * + *

redefinition of 'action' action

+ */ ACTION_REDEFINITION(94, "redefinition of '' action", ErrorSeverity.ERROR), + /** + * Compiler Error 99. + * + *

This error may take any of the following forms.

+ * + *
    + *
  • grammar 'grammar' has no rules
  • + *
  • implicitly generated grammar 'grammar' has no rules
  • + *
+ */ NO_RULES(99, "implicitly generated grammar '' has no rules", ErrorSeverity.ERROR), + /** + * Compiler Error 105. + * + *

+ * reference to undefined grammar in rule reference: + * grammar.rule

+ */ NO_SUCH_GRAMMAR_SCOPE(105, "reference to undefined grammar in rule reference: .", ErrorSeverity.ERROR), + /** + * Compiler Error 106. + * + *

rule 'rule' is not defined in grammar 'grammar'

+ */ NO_SUCH_RULE_IN_SCOPE(106, "rule '' is not defined in grammar ''", ErrorSeverity.ERROR), + /** + * Compiler Warning 108. + * + *

token name 'Token' is already defined

+ */ TOKEN_NAME_REASSIGNMENT(108, "token name '' is already defined", ErrorSeverity.WARNING), + /** + * Compiler Warning 109. + * + *

options ignored in imported grammar 'grammar'

+ */ OPTIONS_IN_DELEGATE(109, "options ignored in imported grammar ''", ErrorSeverity.WARNING), + /** + * Compiler Error 110. + * + *

+ * can't find or load grammar 'grammar' from + * 'filename'

+ */ CANNOT_FIND_IMPORTED_GRAMMAR(110, "can't find or load grammar '' from ''", ErrorSeverity.ERROR), + /** + * Compiler Error 111. + * + *

+ * grammartype grammar 'grammar1' cannot import + * grammartype grammar 'grammar2'

+ */ INVALID_IMPORT(111, " grammar '' cannot import grammar ''", ErrorSeverity.ERROR), + /** + * Compiler Error 113. + * + *

+ * grammartype grammar 'grammar1' and imported + * grammartype grammar 'grammar2' both generate + * 'recognizer'

+ */ IMPORT_NAME_CLASH(113, " grammar '' and imported grammar '' both generate ''", ErrorSeverity.ERROR), + /** + * Compiler Warning 118. + * + *

+ * all operators of alt 'alt' of left-recursive rule must have same + * associativity

+ */ ALL_OPS_NEED_SAME_ASSOC(118, "all operators of alt '' of left-recursive rule must have same associativity", ErrorSeverity.WARNING), + /** + * Compiler Error 119. + * + *

+ * The following sets of rules are mutually left-recursive + * [rules]

+ */ LEFT_RECURSION_CYCLES(119, "The following sets of rules are mutually left-recursive }; separator=\", \">]}; separator=\" and \">", ErrorSeverity.ERROR), + /** + * Compiler Error 120. + * + *

lexical modes are only allowed in lexer grammars

+ */ MODE_NOT_IN_LEXER(120, "lexical modes are only allowed in lexer grammars", ErrorSeverity.ERROR), + /** + * Compiler Error 121. + * + *

cannot find an attribute name in attribute declaration

+ */ CANNOT_FIND_ATTRIBUTE_NAME_IN_DECL(121, "cannot find an attribute name in attribute declaration", ErrorSeverity.ERROR), + /** + * Compiler Error 122. + * + *

rule 'rule': must label all alternatives or none

+ */ RULE_WITH_TOO_FEW_ALT_LABELS(122, "rule '': must label all alternatives or none", ErrorSeverity.ERROR), + /** + * Compiler Error 123. + * + *

+ * rule alt label 'label' redefined in rule 'rule1', + * originally in rule 'rule2'

+ */ ALT_LABEL_REDEF(123, "rule alt label '' redefined in rule '', originally in rule ''", ErrorSeverity.ERROR), + /** + * Compiler Error 124. + * + *

+ * rule alt label 'label' conflicts with rule 'rule'

+ */ ALT_LABEL_CONFLICTS_WITH_RULE(124, "rule alt label '' conflicts with rule ''", ErrorSeverity.ERROR), + /** + * Compiler Warning 125. + * + *

implicit definition of token 'Token' in parser

+ */ IMPLICIT_TOKEN_DEFINITION(125, "implicit definition of token '' in parser", ErrorSeverity.WARNING), + /** + * Compiler Error 126. + * + *

+ * cannot create implicit token for string literal in non-combined grammar: + * literal

+ */ IMPLICIT_STRING_DEFINITION(126, "cannot create implicit token for string literal in non-combined grammar: ", ErrorSeverity.ERROR), + /** + * Compiler Error 128. + * + *

+ * attribute references not allowed in lexer actions: + * expression

+ */ ATTRIBUTE_IN_LEXER_ACTION(128, "attribute references not allowed in lexer actions: $", ErrorSeverity.ERROR), + /** + * Compiler Error 130. + * + *

label 'label' assigned to a block which is not a set

+ */ LABEL_BLOCK_NOT_A_SET(130, "label '' assigned to a block which is not a set", ErrorSeverity.ERROR), + /** + * Compiler Warning 131. + * + *

This warning may take any of the following forms.

+ * + *
    + *
  • greedy block {@code ()*} contains wildcard; the non-greedy syntax {@code ()*?} may be preferred
  • + *
  • greedy block {@code ()+} contains wildcard; the non-greedy syntax {@code ()+?} may be preferred
  • + *
+ */ EXPECTED_NON_GREEDY_WILDCARD_BLOCK(131, "greedy block () contains wildcard; the non-greedy syntax ()? may be preferred", ErrorSeverity.WARNING), + /** + * Compiler Error 132. + * + *

+ * action in lexer rule 'rule' must be last element of single + * outermost alt

+ * + * @deprecated This error is no longer issued by ANTLR 4.2. + */ @Deprecated LEXER_ACTION_PLACEMENT_ISSUE(132, "action in lexer rule '' must be last element of single outermost alt", ErrorSeverity.ERROR), + /** + * Compiler Error 133. + * + *

+ * {@code ->command} in lexer rule 'rule' must be last element of + * single outermost alt

+ */ LEXER_COMMAND_PLACEMENT_ISSUE(133, "->command in lexer rule '' must be last element of single outermost alt", ErrorSeverity.ERROR), + /** + * Compiler Error 134. + * + *

+ * symbol 'symbol' conflicts with generated code in target language + * or runtime

+ * + *

+ * Note: This error has the same number as the unrelated error + * {@link #UNSUPPORTED_REFERENCE_IN_LEXER_SET}.

+ */ USE_OF_BAD_WORD(134, "symbol '' conflicts with generated code in target language or runtime", ErrorSeverity.ERROR), + /** + * Compiler Error 134. + * + *

rule reference 'rule' is not currently supported in a set

+ * + *

+ * Note: This error has the same number as the unrelated error + * {@link #USE_OF_BAD_WORD}.

+ */ UNSUPPORTED_REFERENCE_IN_LEXER_SET(134, "rule reference '' is not currently supported in a set", ErrorSeverity.ERROR), + /** + * Compiler Error 135. + * + *

cannot assign a value to list label 'label'

+ */ ASSIGNMENT_TO_LIST_LABEL(135, "cannot assign a value to list label ''", ErrorSeverity.ERROR), + /** + * Compiler Error 136. + * + *

return value 'name' conflicts with rule with same name

+ */ RETVAL_CONFLICTS_WITH_RULE(136, "return value '' conflicts with rule with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 137. + * + *

return value 'name' conflicts with token with same name

+ */ RETVAL_CONFLICTS_WITH_TOKEN(137, "return value '' conflicts with token with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 138. + * + *

parameter 'parameter' conflicts with rule with same name

+ */ ARG_CONFLICTS_WITH_RULE(138, "parameter '' conflicts with rule with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 139. + * + *

parameter 'parameter' conflicts with token with same name

+ */ ARG_CONFLICTS_WITH_TOKEN(139, "parameter '' conflicts with token with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 140. + * + *

local 'local' conflicts with rule with same name

+ */ LOCAL_CONFLICTS_WITH_RULE(140, "local '' conflicts with rule with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 141. + * + *

local 'local' conflicts with rule token same name

+ */ LOCAL_CONFLICTS_WITH_TOKEN(141, "local '' conflicts with rule token same name", ErrorSeverity.ERROR), + /** + * Compiler Error 142. + * + *

local 'local' conflicts with parameter with same name

+ */ LOCAL_CONFLICTS_WITH_ARG(142, "local '' conflicts with parameter with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 143. + * + *

local 'local' conflicts with return value with same name

+ */ LOCAL_CONFLICTS_WITH_RETVAL(143, "local '' conflicts with return value with same name", ErrorSeverity.ERROR), + /** + * Compiler Error 144. + * + *

+ * multi-character literals are not allowed in lexer sets: + * literal

+ */ INVALID_LITERAL_IN_LEXER_SET(144, "multi-character literals are not allowed in lexer sets: ", ErrorSeverity.ERROR), + /** + * Compiler Error 145. + * + *

+ * lexer mode 'mode' must contain at least one non-fragment + * rule

+ * + *

+ * Every lexer mode must contain at least one rule which is not declared + * with the {@code fragment} modifier.

+ */ MODE_WITHOUT_RULES(145, "lexer mode '' must contain at least one non-fragment rule", ErrorSeverity.ERROR), /** - * All non-fragment lexer rules must match at least one character. - *

- * The following example shows this error. + * Compiler Warning 146. + * + *

non-fragment lexer rule 'rule' can match the empty string

+ * + *

All non-fragment lexer rules must match at least one character.

+ * + *

The following example shows this error.

* *
 	 * Whitespace : [ \t]+;  // ok
@@ -145,10 +626,16 @@ public enum ErrorType {
 	 */
 	EPSILON_TOKEN(146, "non-fragment lexer rule '' can match the empty string", ErrorSeverity.WARNING),
 	/**
-	 * Left-recursive rules must contain at least one alternative which is not
-	 * left recursive.
-	 * 

- * The following rule produces this error. + * Compiler Error 147. + * + *

+ * left recursive rule 'rule' must contain an alternative which is + * not left recursive

+ * + *

Left-recursive rules must contain at least one alternative which is not + * left recursive.

+ * + *

The following rule produces this error.

* *
 	 * // error 147:
@@ -159,10 +646,16 @@ public enum ErrorType {
 	 */
 	NO_NON_LR_ALTS(147, "left recursive rule '' must contain an alternative which is not left recursive", ErrorSeverity.ERROR),
 	/**
-	 * In left-recursive rules, all left-recursive alternatives must match at
-	 * least one symbol following the recursive rule invocation.
-	 * 

- * The following rule produces this error. + * Compiler Error 148. + * + *

+ * left recursive rule 'rule' contains a left recursive alternative + * which can be followed by the empty string

+ * + *

In left-recursive rules, all left-recursive alternatives must match at + * least one symbol following the recursive rule invocation.

+ * + *

The following rule produces this error.

* *
 	 * a : ID    // ok        (alternative is not left recursive)
@@ -173,57 +666,89 @@ public enum ErrorType {
 	 */
 	EPSILON_LR_FOLLOW(148, "left recursive rule '' contains a left recursive alternative which can be followed by the empty string", ErrorSeverity.ERROR),
 	/**
-	 * Each lexer command requires an explicit implementation in the target
+	 * Compiler Error 149.
+	 *
+	 * 

+ * lexer command 'command' does not exist or is not supported by + * the current target

+ * + *

Each lexer command requires an explicit implementation in the target * templates. This error indicates that the command was incorrectly written - * or is not supported by the current target. - *

- * The following rule produces this error. - * + * or is not supported by the current target.

+ * + *

The following rule produces this error.

+ * *
 	 * X : 'foo' -> type(Foo);  // ok
 	 * Y : 'foo' -> token(Foo); // error 149 (token is not a supported lexer command)
 	 * 
+ * + * @since 4.1 */ INVALID_LEXER_COMMAND(149, "lexer command '' does not exist or is not supported by the current target", ErrorSeverity.ERROR), /** - * Some lexer commands require an argument. - *

- * The following rule produces this error. + * Compiler Error 150. + * + *

missing argument for lexer command 'command'

+ * + *

Some lexer commands require an argument.

+ * + *

The following rule produces this error.

* *
 	 * X : 'foo' -> type(Foo); // ok
 	 * Y : 'foo' -> type;      // error 150 (the type command requires an argument)
 	 * 
+ * + * @since 4.1 */ MISSING_LEXER_COMMAND_ARGUMENT(150, "missing argument for lexer command ''", ErrorSeverity.ERROR), /** - * A lexer command which does not take parameters was invoked with an - * argument. - *

- * The following rule produces this error. + * Compiler Error 151. + * + *

lexer command 'command' does not take any arguments

+ * + *

A lexer command which does not take parameters was invoked with an + * argument.

+ * + *

The following rule produces this error.

* *
 	 * X : 'foo' -> popMode;    // ok
 	 * Y : 'foo' -> popMode(A); // error 151 (the popMode command does not take an argument)
 	 * 
+ * + * @since 4.1 */ UNWANTED_LEXER_COMMAND_ARGUMENT(151, "lexer command '' does not take any arguments", ErrorSeverity.ERROR), /** - * The parser contains an unterminated string literal. - *

- * The following rule produces this error. + * Compiler Error 152. + * + *

unterminated string literal

+ * + *

The parser contains an unterminated string literal.

+ * + *

The following rule produces this error.

* *
 	 * x : 'x'; // ok
 	 * y : 'y;  // error 152
 	 * 
+ * + * @since 4.1 */ UNTERMINATED_STRING_LITERAL(152, "unterminated string literal", ErrorSeverity.ERROR), /** - * A rule contains a closure ({@code (...)*}) or positive closure - * ({@code (...)+}) around an empty alternative. - *

- * The following rule produces this error. + * Compiler Error 153. + * + *

+ * rule 'rule' contains a closure with at least one alternative + * that can match an empty string

+ * + *

A rule contains a closure ({@code (...)*}) or positive closure + * ({@code (...)+}) around an empty alternative.

+ * + *

The following rule produces this error.

* *
 	 * x  : ;
@@ -231,13 +756,21 @@ public enum ErrorType {
 	 * z1 : ('foo' | 'bar'? 'bar2'?)*;         // error 153
 	 * z2 : ('foo' | 'bar' 'bar2'? | 'bar2')*; // ok
 	 * 
+ * + * @since 4.1 */ EPSILON_CLOSURE(153, "rule '' contains a closure with at least one alternative that can match an empty string", ErrorSeverity.ERROR), /** - * A rule contains an optional block ({@code (...)?}) around an empty - * alternative. - *

- * The following rule produces this warning. + * Compiler Warning 154. + * + *

+ * rule 'rule' contains an optional block with at least one + * alternative that can match an empty string

+ * + *

A rule contains an optional block ({@code (...)?}) around an empty + * alternative.

+ * + *

The following rule produces this warning.

* *
 	 * x  : ;
@@ -245,16 +778,24 @@ public enum ErrorType {
 	 * z1 : ('foo' | 'bar'? 'bar2'?)?;         // warning 154
 	 * z2 : ('foo' | 'bar' 'bar2'? | 'bar2')?; // ok
 	 * 
+ * + * @since 4.1 */ EPSILON_OPTIONAL(154, "rule '' contains an optional block with at least one alternative that can match an empty string", ErrorSeverity.WARNING), /** - * A lexer rule contains a standard lexer command, but the constant value + * Compiler Warning 155. + * + *

+ * rule 'rule' contains a lexer command with an unrecognized + * constant value; lexer interpreters may produce incorrect output

+ * + *

A lexer rule contains a standard lexer command, but the constant value * argument for the command is an unrecognized string. As a result, the * lexer command will be translated as a custom lexer action, preventing the * command from executing in some interpreted modes. The output of the lexer - * interpreter may not match the output of the generated lexer. - *

- * The following rule produces this warning. + * interpreter may not match the output of the generated lexer.

+ * + *

The following rule produces this warning.

* *
 	 * @members {
@@ -264,17 +805,102 @@ public enum ErrorType {
 	 * X : 'foo' -> channel(HIDDEN);           // ok
 	 * Y : 'bar' -> channel(CUSTOM);           // warning 155
 	 * 
+ * + * @since 4.2 */ UNKNOWN_LEXER_CONSTANT(155, "rule '' contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output", ErrorSeverity.WARNING), - // Backward incompatibility errors + /* + * Backward incompatibility errors + */ + + /** + * Compiler Error 200. + * + *

tree grammars are not supported in ANTLR 4

+ * + *

+ * This error message is provided as a compatibility notice for users + * migrating from ANTLR 3. ANTLR 4 does not support tree grammars, but + * instead offers automatically generated parse tree listeners and visitors + * as a more maintainable alternative.

+ */ V3_TREE_GRAMMAR(200, "tree grammars are not supported in ANTLR 4", ErrorSeverity.ERROR), + /** + * Compiler Warning 201. + * + *

+ * labels in lexer rules are not supported in ANTLR 4; actions cannot + * reference elements of lexical rules but you can use + * {@link Lexer#getText()} to get the entire text matched for the rule

+ * + *

+ * ANTLR 4 uses a DFA for recognition of entire tokens, resulting in faster + * and smaller lexers than ANTLR 3 produced. As a result, sub-rules + * referenced within lexer rules are not tracked independently, and cannot + * be assigned to labels.

+ */ V3_LEXER_LABEL(201, "labels in lexer rules are not supported in ANTLR 4; " + "actions cannot reference elements of lexical rules but you can use " + "getText() to get the entire text matched for the rule", ErrorSeverity.WARNING), + /** + * Compiler Warning 202. + * + *

+ * '{@code tokens {A; B;}}' syntax is now '{@code tokens {A, B}}' in ANTLR + * 4

+ * + *

+ * ANTLR 4 uses comma-separated token declarations in the {@code tokens{}} + * block. This warning appears when the tokens block is written using the + * ANTLR 3 syntax of semicolon-terminated token declarations.

+ * + *

+ * NOTE: ANTLR 4 does not allow a trailing comma to appear following the + * last token declared in the {@code tokens{}} block.

+ */ V3_TOKENS_SYNTAX(202, "'tokens {A; B;}' syntax is now 'tokens {A, B}' in ANTLR 4", ErrorSeverity.WARNING), + /** + * Compiler Error 203. + * + *

+ * assignments in {@code tokens{}} are not supported in ANTLR 4; use lexical + * rule 'TokenName : LiteralValue;' instead

+ * + *

+ * ANTLR 3 allowed literal tokens to be declared and assigned a value within + * the {@code tokens{}} block. ANTLR 4 no longer offers this syntax. When + * migrating a grammar from ANTLR 3 to ANTLR 4, any tokens with a literal + * value declared in the {@code tokens{}} block should be converted to + * standard lexer rules.

+ */ V3_ASSIGN_IN_TOKENS(203, "assignments in tokens{} are not supported in ANTLR 4; use lexical rule ' : ;' instead", ErrorSeverity.ERROR), + /** + * Compiler Warning 204. + * + *

+ * {@code {...}?=>} explicitly gated semantic predicates are deprecated in + * ANTLR 4; use {@code {...}?} instead

+ * + *

+ * ANTLR 4 treats semantic predicates consistently in a manner similar to + * gated semantic predicates in ANTLR 3. When migrating a grammar from ANTLR + * 3 to ANTLR 4, all uses of the gated semantic predicate syntax can be + * safely converted to the standard semantic predicated syntax, which is the + * only form used by ANTLR 4.

+ */ V3_GATED_SEMPRED(204, "{...}?=> explicitly gated semantic predicates are deprecated in ANTLR 4; use {...}? instead", ErrorSeverity.WARNING), + /** + * Compiler Error 205. + * + *

{@code (...)=>} syntactic predicates are not supported in ANTLR 4

+ * + *

+ * ANTLR 4's improved lookahead algorithms do not require the use of + * syntactic predicates to disambiguate long lookahead sequences. The + * syntactic predicates should be removed when migrating a grammar from + * ANTLR 3 to ANTLR 4.

+ */ V3_SYNPRED(205, "(...)=> syntactic predicates are not supported in ANTLR 4", ErrorSeverity.ERROR), // Dependency sorting errors @@ -283,10 +909,41 @@ public enum ErrorType { //CIRCULAR_DEPENDENCY(200, "your grammars contain a circular dependency and cannot be sorted into a valid build order", ErrorSeverity.ERROR), ; + /** + * The error or warning message, in StringTemplate 4 format using {@code <} + * and {@code >} as the delimiters. Arguments for the message may be + * referenced using the following names: + * + *
    + *
  • {@code arg}: The first template argument
  • + *
  • {@code arg2}: The second template argument
  • + *
  • {@code arg3}: The third template argument
  • + *
  • {@code verbose}: {@code true} if verbose messages were requested; otherwise, {@code false}
  • + *
  • {@code exception}: The exception which resulted in the error, if any.
  • + *
  • {@code stackTrace}: The stack trace for the exception, when available.
  • + *
+ */ public final String msg; - public final int code; // unique, deterministic unchanging error code once we release + /** + * The error or warning number. + * + *

The code should be unique, and following its + * use in a release should not be altered or reassigned.

+ */ + public final int code; + /** + * The error severity. + */ public final ErrorSeverity severity; + /** + * Constructs a new {@link ErrorType} with the specified code, message, and + * severity. + * + * @param code The unique error number. + * @param msg The error message template. + * @param severity The error severity. + */ ErrorType(int code, String msg, ErrorSeverity severity) { this.code = code; this.msg = msg;