[ 
https://issues.apache.org/jira/browse/GROOVY-9936?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul King updated GROOVY-9936:
------------------------------
    Labels: breaking  (was: )

> Difference between Antlr2 and parrot parsers for variable declaration 
> optimisation
> ----------------------------------------------------------------------------------
>
>                 Key: GROOVY-9936
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9936
>             Project: Groovy
>          Issue Type: Bug
>          Components: parser-antlr4
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>              Labels: breaking
>             Fix For: 3.0.8, 4.0.0-alpha-3
>
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> As an optimisation for parsing, both parsers treat statements like:
> {code}
> int var1
> Foo var2
> Bar var3
> {code}
> as variable declarations due to the starting capital letter of the first term 
> (for non-primitives).
> And the following are treated by both parsers as command expressions:
> {code}
> foo x
> bar y
> {code}
> due to the lowercase starting letter of the first term. If a class starts 
> with a lowercase letter (valid though not conventional) the workaround where 
> a variable declaration is desired is to use something like:
> {code}
> import myClass as MyClass
> MyClass foo
> {code}
> A difference in behavior can be noted for cases starting with underscore or 
> dollar (the only other characters available for the first letter of a class 
> name):
> {code}
> _foo bar
> $bar baz
> {code}
> These were command expressions for the old parser and are being coerced to 
> variable declarations in the Parrot parser.
> We need to decide whether to alter these last two cases for backwards 
> compatibility or whether we see this as a breaking change which better aligns 
> with the Java specification.
> I propose we opt for backwards compatibility since the above mentioned 
> workaround would apply equally for classes with these starting characters, 
> whereas renaming a method starting with these characters is more complicated.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to