lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


steve donovan wrote:
On Mon, Oct 12, 2009 at 6:08 PM, Francesco Abbate
<francesco.bbt@gmail.com> wrote:
|x| sin(x)/x
or
|x, y| sin(x) * cos(y)

You're not the first to want this ;)

http://lua-users.org/wiki/ShortAnonymousFunctions

No direct clues there to patch the parser, however.

If you trace the call tree of the recursive descent parser in lparser.c (starting from luaY_parser), I think it is do-able, the call tree is pretty straightforward.

For function definitions:

statement() -> funcstat() -> funcname() -> body()

body() is where the parameter list is parsed.

So for |x,y|, you need to check for the first '|', then call out to its own 'stat' (statement handler) function, where you follow the style of the parameter parsing in body(), but check for '|' instead of a closing ')'.

For the body, which is a expression (or can it be a list of expressions?), you can look at the flow of explist1(). The expression handling stuff is pretty compact code, so take your time to follow the call tree.

HTH,
--
Cheers,
Kein-Hong Man (esq.)
Kuala Lumpur, Malaysia