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