diff --git a/src/redempt/redlex/token/StringToken.java b/src/redempt/redlex/token/StringToken.java index 4bd1bcc..316941e 100644 --- a/src/redempt/redlex/token/StringToken.java +++ b/src/redempt/redlex/token/StringToken.java @@ -2,6 +2,7 @@ import redempt.redlex.data.TokenType; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -57,6 +58,12 @@ public int maxLength() { @Override public List calcFirstCharacters() { + if (!caseSensitive && string.length() > 0) { + List chars = new ArrayList<>(); + chars.add(string.charAt(0)); + chars.add(Character.toUpperCase(string.charAt(0))); + return chars; + } return Collections.singletonList(string.length() == 0 ? null : string.charAt(0)); } diff --git a/test/java/redempt/redlex/test/RedLexTest.java b/test/java/redempt/redlex/test/RedLexTest.java index e23e167..77dfec9 100644 --- a/test/java/redempt/redlex/test/RedLexTest.java +++ b/test/java/redempt/redlex/test/RedLexTest.java @@ -118,6 +118,12 @@ public void caseInsensitiveTest() { assertDoesNotThrow(() -> lexer.tokenize("aBc")); assertDoesNotThrow(() -> lexer.tokenize("Abc")); assertDoesNotThrow(() -> lexer.tokenize("ABC")); + + Lexer lexer2 = BNFParser.createLexer("root ::= \"abc\""); + assertDoesNotThrow(() -> lexer2.tokenize("abc")); + assertThrows(LexException.class, () -> lexer2.tokenize("Abc")); + assertThrows(LexException.class, () -> lexer2.tokenize("aBc")); + assertThrows(LexException.class, () -> lexer2.tokenize("aBC")); } }