> On Mar 29, 2020, at 0:19, Milles, Eric (TR Tech, Content & Ops)
> <[email protected]> wrote:
>
> Is there any language that differentiates between one space and multiple
> whitespaces as a separator? My experience with C, C++, Java, Groovy, etc. is
> that any number of whitespaces are the same in terms of separation between
> tokens.
Not really:
String accepted = "a" +
"b" // works, gives "ab"
String bad = "a"
+ "b" // compile error
So, white space is significant in Groovy.
>
> In terms of parsing, you can't tell that an identifier is a method name --
> you mention below closure follows method name -- you don't know until
> semantic analysis and possibly runtime in terms of dynamic Groovy if an
> identifier refers to a method name.
>
>
> Can the user insert a semicolon to disambiguate?
> ```
> a | meth ; // now the parser knows this statement is over
> { p ->
> }
> ```
>
> I don't think you are ever going to see an end to ambiguous constructs due to
> optional parentheses and semicolons.
>
> -----Original Message-----
> From: Daniel.Sun <[email protected]>
> Sent: Friday, March 27, 2020 10:06 PM
> To: [email protected]
> Subject: About eliminating ambiguities of method call with closure argument
>
> Hi all,
>
> Current groovy grammar of method call contains the following
> ambiguities, which are odd for users. For example,
>
> 1) method call with closure argument. That means the closure on the next line
> could be treated as argument of method `meth` ``` meth { p -> } ```
>
> 2) binary expression and closure expression. That means the closure is not an
> argument.
> ```
> a | meth
> { p ->
> }
> ```
>
> I propose to unify the grammar of closure arguments: when closure
> follows method name directly, it is an argument, otherwise it is just
> standalone closure. For example,
>
> 3) method call with closure argument
> ```
> meth { p ->
> }
> ```
>
> 4) variable and closure
> ```
> meth
> { p ->
> }
> ```
>
> Luckily, groovy-parser project containing source code of some famous
> groovy projects, none of which are broken because of the proposed change[1].
>
> Here is a JIRA ticket[2] to track the proposed change, and here is the
> PR[3] to implement the change.
>
> Any thoughts?
>
> Cheers,
> Daniel Sun
> [1]
> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fdanielsun1106%2Fgroovy-parser%2Fcommits%2FGROOVY-9484&data=02%7C01%7Ceric.milles%40thomsonreuters.com%7Cbc5bd8c149104982c52b08d7d2c503df%7C62ccb8646a1a4b5d8e1c397dec1a8258%7C0%7C0%7C637209615925168880&sdata=qdhNufAqJP8kpOtsz1QWwz2b06pR%2F1v5loQnNcuWWRM%3D&reserved=0
> [2]
> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fissues.apache.org%2Fjira%2Fbrowse%2FGROOVY-9484&data=02%7C01%7Ceric.milles%40thomsonreuters.com%7Cbc5bd8c149104982c52b08d7d2c503df%7C62ccb8646a1a4b5d8e1c397dec1a8258%7C0%7C0%7C637209615925168880&sdata=Z3FyviGcsG4EtvIGiAv889dG%2F2p%2FhqClAED998%2BnT98%3D&reserved=0
> [3]
> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Fgroovy%2Fpull%2F1211&data=02%7C01%7Ceric.milles%40thomsonreuters.com%7Cbc5bd8c149104982c52b08d7d2c503df%7C62ccb8646a1a4b5d8e1c397dec1a8258%7C0%7C0%7C637209615925168880&sdata=iXdv8OT3BMIyno8R3TlLclEB1%2BSd%2BxPlCaxhacydSqA%3D&reserved=0
>
>
>
>
> -----
> Apache Groovy committer & PMC member
> Blog:
> https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fblog.sunlan.me&data=02%7C01%7Ceric.milles%40thomsonreuters.com%7Cbc5bd8c149104982c52b08d7d2c503df%7C62ccb8646a1a4b5d8e1c397dec1a8258%7C0%7C0%7C637209615925168880&sdata=70Xxc7%2Bg6iF7bhVISTRF48hxQkUb5%2F7iuuofMttDF2o%3D&reserved=0
> Twitter: @daniel_sun
>
> --
> Sent from:
> https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgroovy.329449.n5.nabble.com%2FGroovy-Dev-f372993.html&data=02%7C01%7Ceric.milles%40thomsonreuters.com%7Cbc5bd8c149104982c52b08d7d2c503df%7C62ccb8646a1a4b5d8e1c397dec1a8258%7C0%7C0%7C637209615925168880&sdata=bGnd%2BrQj%2FPKljTtkIdT2fFyGF9aQb0QgR1RzQlWRPsY%3D&reserved=0