Lexical analysis and NEWLINE tokens

I posted this question to python-help, but I think I have a better chance of getting the answer here. I'm looking for clarification on when NEWLINE tokens are generated during lexical analysis of Python source code. In particular, I'm confused about some of the top-level components in Python's grammar (file_input, interactive_input, and eval_input). Section 2.1.7 of the reference manual states that blank lines (lines consisting only of whitespace and possibly a comment) do not generate NEWLINE tokens. This is supported by the definition of a suite, which does not allow for standalone or consecutive NEWLINE tokens. suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT Yet the grammar for top-level components seems to suggest that a parsable input may consist entirely of a single NEWLINE token, or include consecutive NEWLINE tokens. file_input ::= (NEWLINE | statement)* interactive_input ::= [stmt_list] NEWLINE | compound_stmt NEWLINE eval_input ::= expression_list NEWLINE* To me this seems to contradict section 2.1.7 in so far as I don't see how it's possible to generate such a sequence of tokens. What kind of input would generate NEWLINE tokens in the top-level components of the grammar? Matthew Barnes matthew@barnes.net

"Matthew F. Barnes" <mfb@lotusland.dyndns.org> writes:
I don't have the spare brain cells to think about your real problem (sorry) but something to be aware of is that the pseudo EBNF of the reference manual is purely descriptive -- it is not actually used in the parsing of Python code at all. Among other things this means it could well just be wrong :/ The real grammar is Grammar/Grammar in the source distribution. Cheers, mwh -- The Internet is full. Go away. -- http://www.disobey.com/devilshat/ds011101.htm

I think it is a relic from the distant past, when the lexer did generate NEWLINE for every blank line. I think the only case where you can still get a NEWLINE by itself is in interactive mode. This code is extremely convoluted and may be buggy in end cases; this could explain why you get a continuation prompt after entering a comment in interactive mode... --Guido On 10/6/05, Michael Hudson <mwh@python.net> wrote:
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
participants (4)
-
Guido van Rossum
-
Matthew F. Barnes
-
Michael Hudson
-
Phillip J. Eby