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