Algorithm for matching declarators in C++

limweesi@iscs.nus.sg
Mon, 21 Jun 1993 10:36:08 GMT

          From comp.compilers

Related articles
Algorithm for matching declarators in C++ limweesi@iscs.nus.sg (1993-06-21)
Re: Algorithm for matching declarators in C++ hendrik@vedge.com (Hendrik Boom) (1993-06-29)
| List of all articles for this month |

Newsgroups: comp.compilers
From: limweesi@iscs.nus.sg
Keywords: C++, parse, question
Organization: National University of Singapore
Date: Mon, 21 Jun 1993 10:36:08 GMT

Hi,
I am involved in a C++ translator that requires me to check a
function signature (function call) against a list of function signatures
that are declared (overloading resolution). In the course of checking, I
have to match the declarator list of the actual argument to the
declarator list of the formal argument. This is where I am stuck !
Examples:

void f(int [][10][10]); \\ declarator list {[] [] []}
void g(int *[10]); \\ (array of pointers) { [] * }

main () {
int (**a)[], \\ { * * [] }
*(*b)[], \\ { * [] * }
* c[][10], \\ { [] [] * }

** d, \\ { * * }
e[][10]; \\ { [] [] }

f(a); \\ this will work
f(b); \\ this will fail
f(c); \\ this will fail

g(d); \\ this will work
g(e); \\ this will fail
}

The above result is obtained by compiling the code using CC (ver 2.1)
My main problem for this example is that I don't know when I can
convert a * declarator to a [] or vice versa. I believe there are some
rules or algorithms pertaining to this as it is exactly the same as C
language. Can somebody enlighten me on this, or point me to a book where
the matching algorithm or rules can be found. What about other form of
declarators { &, (), ::* } ? Do I also have to check on the const-ness
and volatile-ness of each declarator, if so, how ?

Thanx for any reply.

desperate email limweesi@iscs.nus.sg
  weesin
~~~~~~~~

--


Post a followup to this message

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