Related articles |
---|
Trouble understanding LL(k) vs. LALR(k) etc. zork_666@nospammail.net (Johnathan) (2004-03-11) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. maeder@tzi.de (Christian Maeder) (2004-03-15) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. cfc@shell01.TheWorld.com (Chris F Clark) (2004-03-15) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. cdc@maxnet.co.nz (Carl Cerecke) (2004-03-19) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. derkgwen@HotPOP.com (Derk Gwen) (2004-03-26) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. cfc@shell01.TheWorld.com (Chris F Clark) (2004-03-26) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. f40mczf02@sneakemail.com (Karsten Nyblad) (2004-04-03) |
Re: Trouble understanding LL(k) vs. LALR(k) etc. clint@0lsen.net (Clint Olsen) (2004-04-14) |
[6 later articles] |
From: | Christian Maeder <maeder@tzi.de> |
Newsgroups: | comp.compilers |
Date: | 15 Mar 2004 09:29:52 -0500 |
Organization: | Universitaet Bremen, Germany |
References: | 04-03-042 |
Keywords: | parse |
Posted-Date: | 15 Mar 2004 09:29:52 EST |
Johnathan wrote:
> I have a vague idea of left factorisation and the principles of
> recursive descent parsing, and first and follow sets. Is that all I
good
> need to know to determine if a language grammar is LL-able? What is
> the difference between left and right recursion?
see below
> First I'd like to concentrate on LL(k), since it has been said that
> this class of language grammar can be parsed with hand-written
> recursive descent parsers.
that's correct
> Statements = <Statement> | <Statements> <Statement>
That's left recursion (for "Statements"), so the grammar is not LL and
not suited for recursive descent. Simple reverse to right recursion:
.... "<Statement> <Statements>"
(Right recursion is less efficient than left recursion for LR parsers,
though.)
> What I am having problems with in the grammar above is the recursive
> parts. For instance, is this valid?
>
> DeclStmt = VAR <VarList> AS <TypeName> | <ConstDecl>
> ConstDecl = CONST IDENTIFIER AS <TypeName> ASSIGNOP <Expr>
>
> VarList = IDENTIFIER | IDENTIFIER ‘,’ IDENTIFIER
VarList allows only "var" or "var1, var2".:
> How can I check to see if it produces things like:
>
> Dim myVar, var2, var3 As String
change the rule to:
VarList = IDENTIFIER | IDENTIFIER ‘,’ <VarList>
Both rules for Statement and VarList will now require left factorisation.
> I am thinking that my grammar will allow things like this:
>
> Dim Var1, Var2 Var3, Var4 As Whatever
>
> ... because of the VarList rule. Note the missing comma between Var2
> and Var3. I thought this would be better:
no, see above
> DeclStmt ::= DIM <Varname> { ',' <Varname> } As TYPENAME
>
> ... assuming that the part in { } is the part that's recursive.
for "VarName = IDENTIFIER", the part "<Varname> { ',' <Varname> }" is
equal to the corrected "<VarList>".
> Is my grammar LL(k)? Why or why not? I am not really sure where to go
> from here!
I think, I've answered your questions
Christian
Return to the
comp.compilers page.
Search the
comp.compilers archives again.