[antlr-interest] Suggestion: syntactic sugar for generateAmbi gWarnings = false;
Matt Benson
gudnabrsam at yahoo.com
Mon Jun 16 11:06:48 PDT 2003
Monty, since I'm ignorant, will you explain that idea?
-Matt
--- mzukowski at yci.com wrote:
> Seems like a good case for adding syntactic macros
> to ANTLR .g notation ;)
>
> Monty
>
> -----Original Message-----
> From: uprightness_of_character
> [mailto:andrei at metalanguage.com]
> Sent: Saturday, June 14, 2003 12:30 AM
> To: antlr-interest at yahoogroups.com
> Subject: [antlr-interest] Suggestion: syntactic
> sugar for
> generateAmbigWarnings = false;
>
>
> I have a number of rules in which the first rule
> that matches is the
> one that's needed, and there's a final match for
> "everything else". In
> a nutshell => generateAmbigWarnings = false.
>
> For example, consider you write a C-style
> preprocessor, and you
> generate the code to get a macro argument.
>
> The idea is, you need to read up to the first comma,
> but if there are
> parentheses, curly braces, or square brackets, you
> will pair them
> properly (commas are allowed inside). For example,
> "1 (2, a) 3" would
> be a proper argument.
>
> I came up with the following rule:
>
> fetch_macro_argument
> :
> (
> balanced_pars
> | balanced_curlz
> | balanced_squares
> | tok:~(COMMA | LPAR | LCURL | LSQUARE)
> )*
> ;
>
> So, a macro argument can consist of a mixture of the
> following items -
> any set of balanced parens, any set of balanced
> curly braces, any set
> of balanced square brackets, or anything else that's
> not a comma.
>
> Now I could have written this as:
>
> fetch_macro_argument
> :
> (options { generateAmbigWarnings = false; }
> : balanced_pars
> | balanced_curlz
> | balanced_squares
> | tok:~COMMA)
> )*
> ;
>
> (Let me make a remark en passent, the most efficient
> code is actually
> generated for the following:
>
> fetch_macro_argument
> :
> (options { generateAmbigWarnings = false; }
> : balanced_pars
> | balanced_curlz
> | balanced_squares
> | { LA(1) != COMMA}? tok:.)
> )*
> ;
>
> But that's subject of another discussion.)
>
> So anyway, I have two variants to choose from, and
> they are both more
> verbose than I'd like. I'd like to propose defining
> the operator "||"
> (as opposed to "|") to combine "short-circuit" rules
> - rules that obey
> the "first wins" policy.
>
> The notation is nicely consistent with the semantics
> of the "||"
> operator, where the first condition that's true
> stops evaluation.
> Also, the precedence would be lower that that of
> "||" - and that makes
> sense for the grammar, because most of the time you
> want to match some
> discriminating rules, followed by a more general
> one.
>
> With that hypothetical operator I could write my
> rule simply as:
>
> fetch_macro_argument
> :
> (
> balanced_pars
> | balanced_curlz
> | balanced_squares
> || tok:~COMMA
> )*
> ;
>
> Whaddaya think?
>
>
> Andrei
>
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
>
__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list