[antlr-interest] Dumb newbie question dept: Anyway to simulate lexical states?

scott_boag at us.ibm.com scott_boag at us.ibm.com
Wed Jun 23 08:34:09 PDT 2010


I need to at least simulate the lexical states I had in JavaCC.  I've been 
banging my head against ANTLR trying to see if the semantic predicates can 
be used to simulate lexer states.  After several days monkeying with 
things, I think my conclusion is, no... semantic predicates in lexer rules 
only throw FailedPredicateException when false, and do not help the lexer 
decide if a token will be recognized.  But, I do remain a bit confused 
about the whole matter... the documentation is really hard to follow. I've 
read and re-read the Terence Parr chapters on semantic and syntactic 
predicates.  But what happens in a the lexer vs. parser seemed relatively 
confused... as far as I can tell, the same syntax for semantic predicates 
do totally different things in the parser rules vs. the lexer rules.

I'm exploring creating a separate lexer for the XML part of the syntax... 
what Martin Probst's XQPretty does.  But there's not declarative syntax 
for doing multiple lexers... we'll have to create classes that do the 
pushing and popping at the java and C++ level.  Also, multiple token 
streams doesn't seem to work with ANTLRWORKS.  Also, looking at Martin's 
code, multiple scanner handling does seem to have a certain complexity... 
making sure one scanner isn't behind another, and the like.

Generate flex when using C++, which is not an unattractive possibility 
(and, hmm... there is a JFlex out there, and JLex for that matter).  It's 
possible this is my best option?

So, the concrete question is, is it possible in ANTLR3 to filter out sets 
of tokens based on a predicates, or do I need ANTLR4 or a flex variant or 
multiple lexers?

-scott


More information about the antlr-interest mailing list