diff --git a/tool/test/org/antlr/v4/testgen/Generator.java b/tool/test/org/antlr/v4/testgen/Generator.java index 01fed8dec..cf90e0ae7 100644 --- a/tool/test/org/antlr/v4/testgen/Generator.java +++ b/tool/test/org/antlr/v4/testgen/Generator.java @@ -117,9 +117,100 @@ public class Generator { list.add(buildParseTrees()); list.add(buildSemPredEvalLexer()); list.add(buildSemPredEvalParser()); + list.add(buildSets()); return list; } + private TestFile buildSets() throws Exception { + TestFile file = new TestFile("Sets"); + // this must return A not I to the parser; calling a nonfragment rule + // from a nonfragment rule does not set the overall token. + file.addParserTest(input, "SeqDoesNotBecomeSet", "T", "a", + "34", + "34\n", + null); + file.addParserTest(input, "ParserSet", "T", "a", + "x", + "x\n", + null); + file.addParserTest(input, "ParserNotSet", "T", "a", + "zz", + "z\n", + null); + file.addParserTest(input, "ParserNotToken", "T", "a", + "zz", + "zz\n", + null); + file.addParserTest(input, "ParserNotTokenWithLabel", "T", "a", + "zz", + "z\n", + null); + file.addParserTest(input, "RuleAsSet", "T", "a", + "b", + "b\n", + null); + file.addParserTest(input, "NotChar", "T", "a", + "x", + "x\n", + null); + file.addParserTest(input, "OptionalSingleElement", "T", "a", + "bc", + "bc\n", + null); + file.addParserTest(input, "OptionalLexerSingleElement", "T", "a", + "bc", + "bc\n", + null); + file.addParserTests(input, "StarLexerSingleElement", "T", "a", + "bbbbc", "bbbbc\n", + "c", "c\n"); + file.addParserTest(input, "PlusLexerSingleElement", "T", "a", + "bbbbc", + "bbbbc\n", + null); + file.addParserTest(input, "OptionalSet", "T", "a", + "ac", + "ac\n", + null); + file.addParserTest(input, "StarSet", "T", "a", + "abaac", + "abaac\n", + null); + file.addParserTest(input, "PlusSet", "T", "a", + "abaac", + "abaac\n", + null); + file.addParserTest(input, "LexerOptionalSet", "T", "a", + "ac", + "ac\n", + null); + file.addParserTest(input, "LexerStarSet", "T", "a", + "abaac", + "abaac\n", + null); + file.addParserTest(input, "LexerPlusSet", "T", "a", + "abaac", + "abaac\n", + null); + file.addParserTest(input, "NotCharSet", "T", "a", + "x", + "x\n", + null); + file.addParserTest(input, "NotCharSetWithLabel", "T", "a", + "x", + "x\n", + null); + file.addParserTest(input, "NotCharSetWithRuleRef3", "T", "a", + "x", + "x\n", + null); + file.addParserTest(input, "CharSetLiteral", "T", "a", + "A a B b", + "A\n" + "a\n" + "B\n" + "b\n", + null); + return file; + } + private TestFile buildSemPredEvalParser() throws Exception { TestFile file = new TestFile("SemPredEvalParser"); file.addParserTest(input, "SimpleValidate", "T", "s", diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/CharSetLiteral.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/CharSetLiteral.st new file mode 100644 index 000000000..b52c6dfc7 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/CharSetLiteral.st @@ -0,0 +1,4 @@ +grammar ; +a : (A {})+ ; +a : [AaBb] ; +WS : (' '|'\n')+ -> skip ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerOptionalSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerOptionalSet.st new file mode 100644 index 000000000..f8f0db822 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerOptionalSet.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : ('a'|'b')? 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerPlusSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerPlusSet.st new file mode 100644 index 000000000..48357285f --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerPlusSet.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : ('a'|'b')+ 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerStarSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerStarSet.st new file mode 100644 index 000000000..17d4d2cd1 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/LexerStarSet.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : ('a'|'b')* 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/NotChar.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotChar.st new file mode 100644 index 000000000..09644818b --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotChar.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : ~'b' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSet.st new file mode 100644 index 000000000..a1e835e8c --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSet.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : ~('b'|'c') ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithLabel.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithLabel.st new file mode 100644 index 000000000..a7b229bbe --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithLabel.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : h=~('b'|'c') ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithRuleRef3.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithRuleRef3.st new file mode 100644 index 000000000..83aae7d73 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/NotCharSetWithRuleRef3.st @@ -0,0 +1,5 @@ +grammar ; +a : A {} ; +a : ('a'|B) ; // this doesn't collapse to set but works +fragment +B : ~('a'|'c') ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalLexerSingleElement.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalLexerSingleElement.st new file mode 100644 index 000000000..059b86b92 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalLexerSingleElement.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : 'b'? 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSet.st new file mode 100644 index 000000000..128433b14 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSet.st @@ -0,0 +1,2 @@ +grammar ; +a : ('a'|'b')? 'c' {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSingleElement.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSingleElement.st new file mode 100644 index 000000000..4a7ee5072 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/OptionalSingleElement.st @@ -0,0 +1,3 @@ +grammar ; +a : A? 'c' {} ; +a : 'b' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotSet.st new file mode 100644 index 000000000..eca2f1b3d --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotSet.st @@ -0,0 +1,2 @@ +grammar ; +a : t=~('x'|'y') 'z' {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotToken.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotToken.st new file mode 100644 index 000000000..f5b1a914d --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotToken.st @@ -0,0 +1,2 @@ +grammar ; +a : ~'x' 'z' {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotTokenWithLabel.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotTokenWithLabel.st new file mode 100644 index 000000000..6dc068aab --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserNotTokenWithLabel.st @@ -0,0 +1,2 @@ +grammar ; +a : t=~'x' 'z' {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserSet.st new file mode 100644 index 000000000..528eca4b4 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/ParserSet.st @@ -0,0 +1,2 @@ +grammar ; +a : t=('x'|'y') {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusLexerSingleElement.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusLexerSingleElement.st new file mode 100644 index 000000000..51a16fa1d --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusLexerSingleElement.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : 'b'+ 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusSet.st new file mode 100644 index 000000000..5027cd639 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/PlusSet.st @@ -0,0 +1,2 @@ +grammar ; +a : ('a'|'b')+ 'c' {} ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/RuleAsSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/RuleAsSet.st new file mode 100644 index 000000000..feced0155 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/RuleAsSet.st @@ -0,0 +1,2 @@ +grammar ; +a @after {} : 'a' | 'b' |'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/SeqDoesNotBecomeSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/SeqDoesNotBecomeSet.st new file mode 100644 index 000000000..1bab7fe17 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/SeqDoesNotBecomeSet.st @@ -0,0 +1,5 @@ +grammar ; +a : C {} ; +fragment A : '1' | '2'; +fragment B : '3' '4'; +C : A | B; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/StarLexerSingleElement.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/StarLexerSingleElement.st new file mode 100644 index 000000000..69d12c81e --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/StarLexerSingleElement.st @@ -0,0 +1,3 @@ +grammar ; +a : A {} ; +a : 'b'* 'c' ; diff --git a/tool/test/org/antlr/v4/testgen/grammars/Sets/StarSet.st b/tool/test/org/antlr/v4/testgen/grammars/Sets/StarSet.st new file mode 100644 index 000000000..0f0b2a0f9 --- /dev/null +++ b/tool/test/org/antlr/v4/testgen/grammars/Sets/StarSet.st @@ -0,0 +1,2 @@ +grammar ; +a : ('a'|'b')* 'c' {} ;