[antlr-interest] Why does the unused rule effect parser behaviour?
Seref Arikan
serefarikan at kurumsalteknoloji.com
Tue Jan 10 02:03:10 PST 2012
Greetings,
The simple grammar below should be able to parse simple input: aa
When id_char_minus_t is commented out it can. When it is included in the
grammar, even if it is not used at all, it can't.
I really don't understand what is going on here. Even more weird thing is:
when id_char_minus_t is included, it can parse input: dd
I'm clearly lost here, so I would really appreciate the input. Why is Anltr
doing this?
grammar RecursionTests;
rul : alphanumeric* ;
//Identifier = {LetterMinusA}{IdCharMinusT}?{IdChar}* |
'a''t'?(({letter}|'_')*|{LetterMinusT}{Alphanumeric}*)
/*
identifier
: ( letter_minus_a (letter_minus_t)? (id_char)* )
| ( 'a' ('t')? ( ( (Letter_lowercase | Letter_uppercase |
Underscore)* ) | (letter_minus_t (alphanumeric)*) ))
;
*/
letter_minus_a
: {input.LT(1).getText().contains("a") == false &&
input.LT(1).getText().contains("A") == false}?(Letter_lowercase |
Letter_uppercase)
;
letter_minus_t
: {input.LT(1).getText().contains("t") == false &&
input.LT(1).getText().contains("T") == false}?(Letter_lowercase |
Letter_uppercase)
;
id_char_minus_t
: 'a'..'s'| 'u'..'z' | 'A'..'S' | 'U'..'Z' | Digit | '_'
;
letter_or_underscore
: Letter_lowercase | Letter_uppercase | Underscore
;
id_char
: Letter_lowercase | Letter_uppercase | Digit | Underscore
;
alphanumeric
: Letter_lowercase | Letter_uppercase | Digit
;
Digit
: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
;
Letter_uppercase
: 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' |
'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X'
| 'Y' | 'Z'
;
Letter_lowercase
: 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' |
'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x'
| 'y' | 'z'
;
Underscore
: '_'
;
More information about the antlr-interest
mailing list