[antlr-interest] More ANTLR meta-syntax questions

Brian Smith brian-l-smith at uiowa.edu
Tue May 14 01:13:32 PDT 2002


jsrs701 wrote:

>--- In antlr-interest at y..., mzukowski at y... wrote:
>
>>ANTLR requires the parenthesis.  It makes it easier to associate 
>>
>actions with the proper construct, e.g. inside or outside of the ()+ 
>
>closure.
>
>
>Hi Brian,
>
>Since you're new to ANTLR, that might not make much sense without an 
>example, though it's a very good answer.
>
>A: ( B )+ ;
>
>That seems redundant, sure.  But what about when you add the actions 
>that Monty mentioned?
>
>A: ( B { /* do something with this particular B */ } )+
>   { /* do something with the group of matched B's */ }
> ;
>
>How would you do that without the parentheses?
>
Thank you for your answers. I realize that they help when usiong the 
"options { ... }" construct, actions, and predicates. It just seems odd 
to me that they are required even when not using these constructs. But, 
I will deal with it.

Actually, I have a few other questions about how ANTLR works and why 
certain things are the way they are. I read through the FAQ and didn't 
see answers to these, but I apologize in advance if I missed them somewhere:

(1) Why does ANTLR bother with seperating the lexical rules from the 
parsing rules? In particular, it requires that lexical rules start with 
an uppercase letter and parser rules start with a lowercase letter, and 
the rules are defined in seperate sections. Is it just an enforced 
(historical) convention or is there a philisophical reason for it? I 
have found that even with my first grammer (a modified OCL grammar), I 
wanted to move rules between the parser and the lexer fairly freely but 
each time I was forced to do a search and replace on the grammar file to 
change letter case, even though the rule body was exactly the same. 
Also, I have found that the ANTLR syntax makes the distinction between 
lexer and parser seem almost arbitrary since they are both specified 
with EBNF.

(2) In ANTLR, you have to specify a lookahead distince (k) for the 
parser. My OCL grammar is LL(1) for all rules except one, which requires 
2 tokens of lookahead. So, I changed my grammar to be specified as 
LL(2). Does this affect the performance of my LL(1) rules? Is there a 
runtime performance penalty to saying k=2 for rules where k=1 is 
sufficient? If not, is it (theoretically) possible for ANTLR to compute 
the minimum value of k needed for my grammar to be unambiguous?

(3) I know that I have to use a syntactic predicate for "infinite" 
lookahead. But, if I only need a larger-than-k finite lookahead (say, 
two tokens when k=1), is there any advantage to using a syntactic 
predicate instead of increasing the value of k (e.g. performance)? I 
would rather increase k since my grammar is then more readable

(4) I know that ANTLR handles grammars that are "approximately" LL(k), 
and that LL(k) is a subset of LALR(1). But, is LL(k)+syntactic 
predicates still a subset of LALR(1)? That is, are there LALR(1), 
LALR(k), or LR(k) grammars that cannot be specified in ANTLR's 
LL(k)+syntactic predicates?

Thanks a lot,
Brian





 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list