diff --git a/tool/src/org/antlr/v4/tool/ErrorType.java b/tool/src/org/antlr/v4/tool/ErrorType.java index e3869cea8..ab23599ae 100644 --- a/tool/src/org/antlr/v4/tool/ErrorType.java +++ b/tool/src/org/antlr/v4/tool/ErrorType.java @@ -150,6 +150,7 @@ public enum ErrorType { // ALIAS_REASSIGNMENT(127, "token literal aliased to new token name ", ErrorSeverity.WARNING), ATTRIBUTE_IN_LEXER_ACTION(128, "attribute references not allowed in lexer actions: $", ErrorSeverity.ERROR), WILDCARD_IN_PARSER(129, "wildcard '.' not allowed in parsers", ErrorSeverity.ERROR), + LABEL_BLOCK_NOT_A_SET(130, "label assigned to a block which is not a set", ErrorSeverity.ERROR), /** Documentation comment is unterminated */ //UNTERMINATED_DOC_COMMENT(, "", ErrorSeverity.ERROR), diff --git a/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java b/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java index 524693ace..3d29aa954 100644 --- a/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java +++ b/tool/test/org/antlr/v4/test/TestBasicSemanticErrors.java @@ -66,4 +66,23 @@ public class TestBasicSemanticErrors extends BaseTest { }; @Test public void testU() { super.testErrors(U, false); } + + /** + * Regression test for #25 "Don't allow labels on not token set subrules". + * https://github.com/antlr/antlr4/issues/25 + */ + @Test + public void testIllegalNonSetLabel() throws Exception { + String grammar = + "grammar T;\n" + + "ss : op=('=' | '+=' | expr) EOF;\n" + + "expr : '=' '=';\n" + + ""; + + String expected = + "error(130): T.g4:2:5: label op assigned to a block which is not a set\n"; + + testErrors(new String[] { grammar, expected }, false); + } + }