Optional brackets around lambda expression: proposed syntax with full grammar
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Sat Jun 18 03:58:56 PDT 2011
Hi, good catch,
so we have:
LambdaDeclaration =
LambdaParameterList '->' LambdaBody
LambdaParameterList =
ZeroOrOneLenParameterList | GreaterThanOneLenParameterList
ZeroOrOneLenParameterList =
'(' LambdaParameter? ')' | LambdaParameter?
GreaterThanOneParameterList=
'(' LambdaParameter ( ',' LambdaParameter)+ ')'
LambdaParameter =
Parameter | Identifier
LambdaBody =
Expression | `{' Statement* `}'
And factorized version is:
LambdaDeclaration =
LambdaParameterList '->' LambdaBody
LambdaParameterList =
LambdaParameter? | '(' ( LambdaParameter ( ',' LambdaParameter )* )? ')'
LambdaParameter =
Parameter | Identifier
LambdaBody =
Expression | `{' Statement* `}'
Best Regards,
Ali Ebrahimi
On 6/18/11, Steven Simpson <ss at comp.lancs.ac.uk> wrote:
> On 18/06/11 10:56, Ali Ebrahimi wrote:
>> LambdaDeclaration =
>> LambdaParameterList '->' LambdaBody
>>
>> LambdaParameterList =
>> ZeroOrOneLenParameterList | GreaterThanOneLenParameterList
>>
>> ZeroOrOneLenParameterList =
>> '(' LambdaParameter? ')' | LambdaParameter?
>>
>> GreaterThanOneParameterList=
>> '(' LambdaParameter , (LambdaParameter)+ ')'
>
> That should probably also be:
>
> GreaterThanOneParameterList=
> '(' LambdaParameter ( ',' LambdaParameter )+ ')'
>
> ...unless I'm misunderstanding the meaning of the non-literal comma...?
>
> And if you changed from + to *, you have the unary case with brackets
> covered. Make the contents optional, and you have the nilary covered too:
>
> GreaterThanOneParameterList=
> '(' ( LambdaParameter ( ',' LambdaParameter )* )? ')'
>
> LambdaParameterList =
> LambdaParameter | GreaterThanOneLenParameterList
>
> No need for ZeroOrOneLenParameterList then.
>
>> LambdaParameter =
>> Parameter | Identifier
>>
>> LambdaBody =
>> Expression | `{' Statement* `}'
>
>
>
More information about the lambda-dev
mailing list