title: Why does yacc or bison translate $1 to yyvsp[(1) - (1)].s?
body: <p>Yacc source as below:</p>
  
  <pre><code>element:    IDENTIFIER                { $$ = gst_element_factory_make ($1, NULL);
                          if ($$ == NULL) {
                            ADD_MISSING_ELEMENT (graph, $1);
                            SET_ERROR (graph-&gt;error, GST_PARSE_ERROR_NO_SUCH_ELEMENT, _("no element \"%s\""), $1);
                            /* if FATAL_ERRORS flag is set, we don't have to worry about backwards
                             * compatibility and can continue parsing and check for other missing
                             * elements */
                            if ((graph-&gt;flags &amp; GST_PARSE_FLAG_FATAL_ERRORS) == 0) {
                              gst_parse_strfree ($1);
                              YYERROR;
                            }
                          }
                          gst_parse_strfree ($1);
                                                }
      |   element ASSIGNMENT        { gst_parse_element_set ($2, $1, graph);
                          $$ = $1;
  </code></pre>
  
  <p>It is translated to code like this:</p>
  
  <pre><code> { (yyval.e) = gst_element_factory_make ((yyvsp[(1) - (1)].s), NULL);
                      if ((yyval.e) == NULL) {
                        ADD_MISSING_ELEMENT (graph, (yyvsp[(1) - (1)].s));
                        SET_ERROR (graph-&gt;error, GST_PARSE_ERROR_NO_SUCH_ELEMENT, _("no element \"%s\""), (yyvsp[(1) - (1)].s));
                        /* if FATAL_ERRORS flag is set, we don't have to worry about backwards
                         * compatibility and can continue parsing and check for other missing
                         * elements */
                        if ((graph-&gt;flags &amp; GST_PARSE_FLAG_FATAL_ERRORS) == 0) {
                          gst_parse_strfree ((yyvsp[(1) - (1)].s));
                          YYERROR;
                        }
                      }
                      gst_parse_strfree ((yyvsp[(1) - (1)].s));
                                            }
  break;
  </code></pre>
  
  <p>One of the translations converts:</p>
  
  <pre><code>gst_element_factory_make ($1, NULL)
  </code></pre>
  
  <p>to:</p>
  
  <pre><code>gst_element_factory_make ((yyvsp[(1) - (1)].s), NULL)
  </code></pre>
  
  <p>The <code>[(1) - (1)]</code> is confusing me.
  Why is <code>[(1) - (1)]</code> sentence representative of <code>$1</code> value?</p>