How to parse char **argv?

Raymond Li <supercat@planet.net.hk>
7 Sep 1997 14:59:54 -0400

          From comp.compilers

Related articles
How to parse char **argv? supercat@planet.net.hk (Raymond Li) (1997-09-07)
Re: How to parse char **argv? wasser@jamin.enet.dec.com (1997-09-12)
| List of all articles for this month |

From: Raymond Li <supercat@planet.net.hk>
Newsgroups: comp.lang.c,comp.compilers,comp.lang.c++
Date: 7 Sep 1997 14:59:54 -0400
Organization: Hong Kong Star Internet Ltd.
Keywords: C, parse, question

Hello,

            I have actually three questions, all related to the parsing of
C/C++:

Question 1:

Reading Section 5.2 of Brian and Dennis's The C Programming Language,
I tried to parse the following with the syntax rules defined in A8.5:

The rules in the book:

declarator:
          pointer OPT direct-declarator

direct-declarator:
          identifier
          ( declarator )
          direct-declarator [ constant-expression OPT ]
          direct-declarator ( parameter-type-list )
          direct-declarator ( identifier-list OPT )

The parse I tried:

char * * argv
                | | |
                | | identifer
                | | |
                | | direct-declarator
                | | |
                | -- declarator
                | |
                ------ ???

          My first question is: which grammer rule is it used for the last
line (???)?

Question 2:
In r.17.4 of Bjarne Stroustrup's The C++ Programming Language (second
edition)

It has the rules as:

declarator:
dname
ptr-operator declarator
declarator ( argument-declaration-list ) cv-qualifer-list OPT
                declarator [ constant-expression OPT ]
( declarator )

      With these rules, I found that the following parse seems to be
derived:

int * daytab [13]
        | | |
  pointer dname |
        | | |
        | declarator |
        | | |
        -----declarator |
                      | |
                  declarator----

      But it is different from what I expected with rules of A8.3 of
Brian's book.

int * daytab [13]
        | | |
  pointer dname |
        | | |
        | declarator----
        | |
        -----declarator

        What is the correct parsing and what rules should be used?

Question 3:

How are precedence (of operators ) defined in C 's grammar? Is it
defined implicitly with the ordering of the grammar rules? [Yes, -John]

For instance, books said that [] has a higher precedence than * in
*daytab[13], how is it defined in C language?

      All advice and comments are welcomed. Thanks in advance for your
response. And please cc to my e-mail supercat@planet.net.hk as well.

      Regards,
      Raymond Li Cheuk Fai, supercat@planet.net.hk
--


Post a followup to this message

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