forked from jasder/antlr
Add unit test for behavior of lexer with input-position-sensitive predicates
This commit is contained in:
parent
13e940b1db
commit
1e5cfb4a1e
|
@ -266,6 +266,31 @@ public class TestLexerExec extends BaseTest {
|
||||||
assertEquals(expecting, found);
|
assertEquals(expecting, found);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test public void testLexerInputPositionSensitivePredicates() throws Exception {
|
||||||
|
// The predicates here make sense on the left edge, but are currently
|
||||||
|
// only working on the right edge... resolving this would remove the
|
||||||
|
// need for Lexer.getSpeculativeText as well.
|
||||||
|
String grammar =
|
||||||
|
"lexer grammar L;\n"+
|
||||||
|
"WORD1 : ID1+ {System.out.println(getText());} ;\n"+
|
||||||
|
"WORD2 : ID2+ {System.out.println(getText());} ;\n"+
|
||||||
|
"fragment ID1 : {getCharPositionInLine()<2}? [a-zA-Z];\n"+
|
||||||
|
"fragment ID2 : {getCharPositionInLine()>=2}? [a-zA-Z];\n"+
|
||||||
|
"WS : (' '|'\\n') -> skip;\n";
|
||||||
|
String found = execLexer("L.g4", grammar, "L", "a cde\nabcde\n");
|
||||||
|
String expecting =
|
||||||
|
"a\n" +
|
||||||
|
"cde\n" +
|
||||||
|
"ab\n" +
|
||||||
|
"cde\n" +
|
||||||
|
"[@0,0:0='a',<1>,1:0]\n" +
|
||||||
|
"[@1,2:4='cde',<2>,1:2]\n" +
|
||||||
|
"[@2,6:7='ab',<1>,2:0]\n" +
|
||||||
|
"[@3,8:10='cde',<2>,2:2]\n" +
|
||||||
|
"[@4,12:11='<EOF>',<-1>,3:0]\n";
|
||||||
|
assertEquals(expecting, found);
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void testActionExecutedInDFA() throws Exception {
|
@Test public void testActionExecutedInDFA() throws Exception {
|
||||||
String grammar =
|
String grammar =
|
||||||
"lexer grammar L;\n"+
|
"lexer grammar L;\n"+
|
||||||
|
|
Loading…
Reference in New Issue