Hi,

Apologies in advance for the really basic question.  I've been working on
putting together a css preprocessor, which isn't meant to be a fully
validating parser, but in some places acts almost like a filter outputting
most data verbatim but performing calculations where they exist.  I've got
the structural parsing working, but when I parse a property value I'm
interested in recognising mathematical expressions within the value, and
capturing everything else as a literal.  I am having trouble working out how
to achieve this.  I think the following trivial example illustrates what I'm
trying to do:

grammar trivialambig;

propertyvalue
: (expr | anything)* EOF
;

expr
: NUM '*'
;
anything
: .
;

NUM: '0'..'9';
CHAR: 'a'..'z';


With an input stream of "123" the "anything" rule is disabled as ambiguous,
thus never gets a chance to match.   Where "expr" fails to parse I am trying
to get "anything" to act as a fallback and capture a single character then
repeat the process. Is there a way of achieving this precendence?  I have
tried using syntactic predicates as the book suggests:

propertyvalue
: ((expr)=>expr | anything)* EOF
;

but this produces a mismatched token exception in the antlrworks interpreter
and won't compile for debugging due to RecognitionException being caught
where it's not thrown, and now I'm a bit stuck.  All of the other solutions
I've seen to this problem use a peg based parser that considers whitespace,
but I'm sure this must be possible in antlr somehow!

Any help is much appreciated,

Thanks,

Nick

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.

Reply via email to