Let me just note that the second version using :: is NOT ambiguous for the parser - the one using "." seems to be unless I am missing something obvious.
You have to treat ". with an alphabetic lookahead" as a different kind of token (that would be "."/[A-Za-z] in Flex). Then there is no ambiguity anymore.
What I am a bit concerned about is that I've made the BNF grammar more complex or that I've made it stupid. If a dot/period is followed by whitespace, it terminates the current statement; else it can validly be part of a word or keyword.
The BNF is not more complex if you move the distinction up to the lexical analyzer.
Paolo