What does the star in the field_name input mean in the Python str.format() docs?
<p>In "6.1.3. Format String Syntax" in the Python 3.5.2 docs, the <code>field_name</code> for the replacement field grammar for <code>str.format()</code> is written like this:</p>

<pre><code>field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
</code></pre>

<p>What does the star at the very right mean? I can guess that I can get an object's attribute with <code>arg_name.attribute</code> or element with <code>arg_name[element_index]</code>, but I don't know if that extra star means I can do more with the object. I'm guessing it means that <code>.attribute_name</code> and <code>[element_index]</code> are optional, but I thought the parentheses already implied that. </p>

<p><a href="https://docs.python.org/3/reference/introduction.html#notation" rel="nofollow">Python Language Reference, section 1.2.</a> says:</p>

<blockquote>
  <p>The descriptions of lexical analysis and syntax use a modified BNF
  grammar notation. This uses the following style of definition:</p>

<pre><code>name      ::=  lc_letter (lc_letter | "_")*
lc_letter ::=  "a"..."z"
</code></pre>
  
  <p>The first line says that a <code>name</code> is an <code>lc_letter</code> followed by a sequence
  of zero or more <code>lc_letter</code>s and underscores. An <code>lc_letter</code> in turn is
  any of the single characters <code>'a'</code> through <code>'z'</code>. (This rule is actually
  adhered to for the names defined in lexical and grammar rules in this
  document.)</p>
  
  <p>Each rule begins with a name (which is the name defined by the rule) and <code>::=</code>. A vertical bar (<code>|</code>) is used to separate alternatives; it is the least binding operator in this notation. A star (<code>*</code>) means zero or more repetitions of the preceding item; likewise, a plus (<code>+</code>) means one or more repetitions, and a phrase enclosed in square brackets (<code>[ ]</code>) means zero or one occurrences (in other words, the enclosed phrase is optional). The <code>*</code> and <code>+</code> operators bind as tightly as possible; parentheses are used for grouping. Literal strings are enclosed in quotes. White space is only meaningful to separate tokens. Rules are normally contained on a single line; rules with many alternatives may be formatted alternatively with each line after the first beginning with a vertical bar.</p>
</blockquote>

<p>So, asterisk <code>*</code> means, as expected, zero or more repetitions of the preceding group.</p>

python documentation