Compiling Java 9

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Nov 16 22:35:43 UTC 2016



On 11/16/2016 02:26 PM, Stephan Herrmann wrote:
> On 11/16/2016 11:01 PM, Jonathan Gibbons wrote:
>>
>>
>> On 11/16/2016 01:41 PM, Stephan Herrmann wrote:
>>>
>>> At the end of the day we need full pattern matching right?
>>
>> Not really, at least, not in javac.
>>
>> Words like 'module', 'requires', etc are lexed as identifiers. When 
>> we get to the point where the grammar would accept one of these
>> words as a keyword,  we simply check to see if we have an identifier 
>> with the appropriate value.
>>
>> -- Jon
>
> OK, feedback from the parser to the scanner to tell it
> whether the current context accepts a specific restricted keyword.
>
> And we may safely assume regularity of the grammar, i.e.,
> the above approach will never lead to ambiguities, right?
>
> Fictitious counter example
>
>    ModuleDeclaration:
>      module open Identifier ModuleBody;
>      module Identifier ModuleBody;
>
> With this the second token could be keyword or identifier, and we're 
> stuck, aren't we?
>
> May we assume that the grammar will not be extended in such ambiguous 
> ways?

I'll leave it to Alex to declare definitively on that, but I think that 
would be a reasonable assumption. :-)

>
> For all tools that read from the start of the file this is good news.
>
> Still no good news for tools wishing to process just a fragment of the 
> text.
>

Just how small a fragment, and in how unknown a context are you worried 
about?    Yes, if you're wanting to locally analyse the character string 
"module" in isolation, then yes, you cannot say whether it is a keyword 
or an identifier, but if you know you're in a ModuleBody, then "exports 
to to exports;" can be processed just fine.

>
> thanks,
> Stephan



More information about the jigsaw-dev mailing list