At 07:37 14/12/2009, Marcin Rzeźnicki wrote:
>Specifically I constructed a sort of catch-all rule which I
>called LINEOFTEXT and was like ~('\n' | '\r')*. After
>replacing that with simple .* LINETERMINATOR my problems went
>away.
Actually, the former is better than the latter
(more specific) -- you were just missing some parentheses:
(~('\n' | '\r'))* LINETERMINATOR
>ANTLR wasn't sure about typeArguments because they can be
>arbitrarily nested (like in List<List<List<String>>>) so I
>changed that to:
>IDENTIFIER ( ( '<' ) => typeArguments )? ( '.'
IDENTIFIER ( ( '<' )
>=>typeArguments )? )*
>
>because when I expect typeIdentifier '<'
inevitably marks beginning
>of type parameter list (I hope that's good reasoning)
That's odd, the original shouldn't have been
ambiguous. It could be something about how the
'<' character is being lexed -- bear in mind that
by using it as a quoted literal in a parser rule
you are effectively creating a new (unnamed)
token. It's usually easier to spot lexer
ambiguity and fix it if you explicitly define all
the lexer rules yourself and don't use any quoted
literals in the parser.
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en.