Keyword abuse (was RE: [Python-Dev] Lockstep iteration (original) (raw)

Tim Peters tim_one@email.msn.com
Thu, 10 Aug 2000 20:44:06 -0400


[Skip Montanaro]

Could this be extended to many/most/all current instances of keywords in Python? As Tim pointed out, Fortran has no keywords. It annoys me that I (for example) can't define a method named "print".

This wasn't accidental in Fortran, though: X3J3 spent many tedious hours fiddling the grammar to guarantee it was always possible. Python wasn't designed with this in mind, and e.g. there's no meaningful way to figure out whether

raise

is an expression or a "raise stmt" in the absence of keywords. Fortran is very careful to make sure such ambiguities can't arise.

A reasonable thing is to restrict global keywords to special tokens that can begin a line. There's real human and machine parsing value in being able to figure out what kind of stmt a line represents from its first token. So letting "print" be a variable name too would, IMO, really suck.

But after that, I don't think users have any problem understanding that different stmt types can have different syntax. For example, if "@" has a special meaning in "print" statments, big deal. Nobody splits a spleen over seeing

a   b, c, d

when "a" happens to be "exec" or "print" today, despite that most stmts don't allow that syntax, and even between "exec" and "print" it has very different meanings. Toss in "global", "del" and "import" too for other twists on what the "b, c, d" part can look like and mean.

As far as I'm concerned, each stmt type can have any syntax it damn well likes! Identifiers with special meaning after a keyword-introduced stmt can usually be anything at all without making them global keywords (be it "as" after "import", or "indexing" after "for", or ...). The only thing Python is missing then is a lisp stmt :

lisp (setq a (+ a 1))

Other than that, the JPython hack looks cool too.

Note that SSKs (stmt-specific keywords) present a new problem to colorizers (or moral equivalents like font-lock), and to other tools that do more than a trivial parse.

the-road-to-p3k-has-toll-booths-ly y'rs - tim