java parsing problem

shirleytemple@my-deja.com
19 Oct 2000 14:38:21 -0400

          From comp.compilers

Related articles
java parsing problem shirleytemple@my-deja.com (2000-10-19)
Re: java parsing problem LLkParsing@aol.com (2000-10-22)
Re: java parsing problem joachim_d@gmx.de (Joachim Durchholz) (2000-10-22)
Re: java parsing problem Ivan_Ivan_Ivan@yahoo.com (Ivan Naumov) (2000-10-22)
| List of all articles for this month |

From: shirleytemple@my-deja.com
Newsgroups: comp.compilers
Date: 19 Oct 2000 14:38:21 -0400
Organization: Deja.com - Before you buy.
Keywords: Java, parse, question

I am hand-writing a recursive-descent parser for a subset of java. I
decided to follow the standard BNF provided in the JLS (java language
specification).

I am having difficulty with the following part of the specification:

Primary:
    PrimaryNoNewArray
    ArrayCreationExpression

PrimaryNoNewArray
    ...
    FieldAccess
    ...

FieldAccess
    Primary . Identifier
    ...

Assuming the simple approach of writing each right hand side as a
method, i would have something (in pseudocode) like:

parsePrimary(scanner) {
      exp = parsePrimaryNoNewArray(scanner);
      if (exp != null) return exp;
// try arrayCreationExpression
}

parsePrimaryNoNewArray(scanner) {
// other rules
    exp = parseFieldAccess(scanner);
    if (exp != null) return exp;
    ...
}
parseFieldAccess(scanner) {
    p = parsePrimary(scanner);
// look for . Identifier etc
}

Obviously this is a loop. I dont really know what I'm talking about
here, but is this because the BNF is LR and I am using an LL approach?
Is this left-recursion?

For that matter what about specifications such as:

AndExpression:
    EqualityExpression
    AndExpression & EqualityExpression

This has the same problem and what I usually do is to mentally rewrite
it as:

AndExpression:
    EqualityExpression (& EqualityExpression)*

where ()* = 0 or more of.

I'd appreciate any help. What would be the correct way to change the
above example to handle the recursion on Primary?


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.