A simple single line, triple-quoted comment is giving syntax error. Why?

Marko Rauhamaa marko at pacujo.net
Fri Apr 3 09:13:11 CEST 2015


Chris Angelico <rosuav at gmail.com>:

> I know that it started in response to my statement that string literal
> concatenation wasn't an expression as such, but I have no idea what
> either side of the current debate is, nor how it affects my
> statement's validity.

This is what I have gathered:

 - A Python expression cannot directly follow another expression. A
   connector is required by the syntax.

 - That's untrue:
    * "abc"  is an expression
    * "def"  is an expression
    * "abc" "def"  is an expression
   QED

 - Merging "abc" "def" is a matter of lexical analysis.

 - No, it's right there in the syntax definition.

 - Well, ok, however, the parse tree for "abc" "def" is not

   expr:
     expr:
       atom:
         string: "abc"
     expr:
       atom:
         string: "def"

   Rather, the correct parse tree is:

   expr:
     expr:
       atom:
         string: "abc"
         string: "def"

   Thus, a Python expression still is not directly following another
   expression.


My own take: all sides are correct. Thomas is most correct and is being
obnoxious about it.

 1. A lexical analyzer *could* take care of concatenating string
    literals. It would have to be smart enough to handle intervening
    comments. On the other hand, the lexical analyzer is just a part of
    the parser; the line between them often is blurred.

 2. The counterexample "abc" "def" *does* demonstrate that expressions
    can at times follow each other immediately. It is a nice point even
    if not all that consequential.

    Somewhat analogously:
     * ord  is an expression
     * ("a")  is an expression
     * ord("a")  is an expression

 3. Arguing about definitions is silly. Is 0 a natural number? Is 1 a
    prime number?


Marko



More information about the Python-list mailing list