BTW: here's a fun example of the merge problem: I add the
new syntax:

  sprocedure_definition := sadjectives "void" sdeclname
    sfun_arg* sopt_traint_eq scompound =>#

This is absolutely the same as the old syntax, except
the word 'void' is used in place of 'proc'. However 'proc'
is a keyword, whereas 'void' is just an identifier which is
spelled 'void'. So I wrote this:

//////////////////////
void g(int x, long *y, z:int) 
{
  var a = x + int(*y) + z;
  println$ a; 
}

g (3,&x,5);
/////////////////////////

and was very puzzled to see:

/////////////////////////////////
[EMAIL PROTECTED]:/work/felix/svn/felix/felix/trunk$ f ab//Parsing
Implementation std.flx
//Parsing Implementation ab.flx
Client Error binding expression (add ((add (x, (int (deref y)))), z))
CLIENT ERROR
[lookup_name_in_env]: Name 'y' not found in environment (depth 2)
In ./ab.flx: line 28 col 1 to  line 34 col 11
27: 
28: void g(int x, long *y, z:int) 
29: {
30:   var a = x + int(*y) + z;
31:   println$ a; 
32: }
33: 
34: g (3,&x,5);
35: 
/////////////////////////////

It works just fine, when 'void' is replaced by 'proc'...

Finally I printed the Felix AST:

call ((((void g) ((int x), long*y, (z:int))) (fun () = {
  var a = x+(int (deref y))+z;
  call println a;
})) g) (3, &(x), 5);


WOOPS! It really did interpret this as a function call
not a definition! Note .. dypgen DID parse it as a definition
too .. I added a debug print to the user action .. that's
why I was confused. Dypgen is selecting the wrong interpretation
here .. it's picking the longer parse (one statement) instead
of the two statement parse.

This works tho:

///////////////////////////////////
void g(int x, long *y, z:int) 
{
  var a = x + int(*y) + z;
  println$ a; 
};

g (3,&x,5);
//////////////////////////

[Hint: the extra semi-colon after the } character .. ]

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to