A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-dev/2004-March/043142.html below:

[Python-Dev] funcdef grammar production

[Python-Dev] funcdef grammar productionJewett, Jim J jim.jewett at eds.com
Mon Mar 15 14:23:04 EST 2004
PEP 318 is likely to change the BNF productions for funcdef,
so I was taking a look at what is there right now.

  funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
  parameter_list ::= (defparameter ",")*
                        ("*" identifier [, "**" identifier] |
				 "**" identifier | defparameter [","])
  defparameter ::= parameter ["=" expression]
  sublist ::= parameter ("," parameter)* [","]
  parameter ::= identifier | "(" sublist ")"
  funcname ::= identifier

But the text points out that no purely positional (without a 
default value) arguments can occur after any keyword arguments.
Is there a reason not to include this in the BNF?

(Assuming the other productions are unchanged,) this seems to work:

  parameter_list ::=  starparameter  |
                      defparameter ("," defparameter)* ["," [starparameter]]
|
                      parameter ("," parameter)* ("," defparameter)* [","
[starparameter]]

  starparameter ::= "*" identifier [, "**" identifier] | 
                    "**" identifier

  defparameter ::= parameter "=" expression

starparameter was separated out because a trailing comma is permitted
after a positional or default parameter, but not after *args or **kwargs.

Is there some technical reason not to do this?  For instance, is the
doco autogenerated from the actual code?  Is it somehow cheaper to
check for an optional first parameter than for three possibilities?

-jJ

More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4