Annotation of 40BSD/cmd/yacc/yaccdiffs, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: 
                      4: 
                      5: 
                      6: 
                      7: 
                      8: 
                      9: 
                     10:                       Yacc Differences
                     11: 
                     12: 
                     13: 
                     14: 
                     15: 
                     16: This document gives a short list of differences between  the
                     17: new Yacc and earlier Yaccs.
                     18: 
                     19: _B_u_g_s _F_i_x_e_d
                     20: 
                     21: 1.   There was a bug which caused  Yacc  to  silently  steal
                     22:      away in the night if an action had mismatched '' in it;
                     23:      this is fixed.
                     24: 
                     25: 2.   A number of table size overflow conditions used  to  be
                     26:      checked incorrectly or not at all; this is now better.
                     27: 
                     28: 3.   A bug which suppressed the printing of some rules  with
                     29:      empty RHS's on the y.output file has been fixed.
                     30: 
                     31: _S_p_e_e_d_u_p_s, _S_h_r_i_n_k_s, _a_n_d _D_i_d_d_l_e_s
                     32: 
                     33: 1.   The old optimizer (-o) flag is now the default in Yacc.
                     34:      At the same time, the Yacc process itself has been sped
                     35:      up; the result is that Yacc takes  about  the  same  or
                     36:      slightly  longer on short inputs, but is much faster on
                     37:      long inputs.
                     38: 
                     39: 2.   The optimized parsers produced by Yacc are likely to be
                     40:      2-3  times  faster  and 1-2k bytes smaller than the old
                     41:      ones, for medium/large grammars.  The time to parse  is
                     42:      now  essentially  independent  of  the grammar size; it
                     43:      used to grow as the size of the grammar did.
                     44: 
                     45: 3.   The y.output file has been considerably reformatted, to
                     46:      make  it easier to read.  The old "goto" table is gone;
                     47:      the goto's for nonterminal symbols are now  printed  in
                     48:      the  states  where  they  occur.   Rules  which  can be
                     49:      reduced in a state have their rule number printed after
                     50:      them,  in  ().   This makes it much easier to interpret
                     51:      the "reduce n" actions.  The message "same  as  n"  has
                     52:      been  removed; duplicate states are in fact duplicated,
                     53:      saving shuffling and cross-referencing.
                     54: 
                     55: 4.   Various table sizes are somewhat bigger.
                     56: 
                     57: 5.   The form feed character, and the construction '\f', are
                     58:      now  recognized;  form feed is ignored (=whitespace) on
                     59:      input.
                     60: 
                     61: 
                     62: 
                     63: 
                     64:                       January 14, 1977
                     65: 
                     66: 
                     67: 
                     68: 
                     69: 
                     70:                            - 2 -
                     71: 
                     72: 
                     73: 
                     74: 6.   The arrays "yysterm" and "yysnter" are no  longer  pro-
                     75:      duced  on  output; they were little used, and took up a
                     76:      surprising amount of space in the parser.
                     77: 
                     78: 7.   Rules in the input which are not reduced are  now  com-
                     79:      plained  about; they may represent unreachable parts of
                     80:      the grammar, botched precedence,  or  duplicate  rules.
                     81:      As  with  conflicts,  a summary complaint, "n rules not
                     82:      reduced", appears at the terminal; more information  is
                     83:      on the y.output file.
                     84: 
                     85: _N_e_w _F_e_a_t_u_r_e_s
                     86: 
                     87: 1.   The actions are now  copied  into  the  middle  of  the
                     88:      parser, rather than being gathered into a separate rou-
                     89:      tine.  It's faster.  Also, you can return a value  from
                     90:      yyparse (and stop parsing...) by saying `return(x);' in
                     91:      an action.  There are  macros  which  simulate  various
                     92:      interesting parsing actions:
                     93: 
                     94:      YYERROR  causes the parser to behave as if a syntax
                     95:      error had been encountered (i.e., do error recovery)
                     96:      YYACCEPT causes a return from yyparse with a value of 0
                     97:      YYABORT  causes a return from yyparse with a value of 1
                     98: 
                     99: 
                    100: 2.   The repositioning of the actions may cause scope  prob-
                    101:      lems  for  some people who include lexical analyzers in
                    102:      funny places.  This can probably be  avoided  by  using
                    103:      another  new  feature:  the `-d' option.  Invoking Yacc
                    104:      with the -d option causes  the  #defines  generated  by
                    105:      Yacc  to  be  written out onto a file called "y.tab.h",
                    106:      (as well as on the "y.tab.c" file).  This can  then  be
                    107:      included as desired in lexical analyzers, etc.
                    108: 
                    109: 3.   Actions  are  now  permitted  within  rules;  for  such
                    110:      actions,  $$, $1, $2, etc. continue to have their usual
                    111:      meanings.  An error  message  is  returned  if  any  $n
                    112:      refers  to  a value lying to the right of the action in
                    113:      the rule.  These internal actions are assumed to return
                    114:      a  value,  which  is accessed through the $n mechanism.
                    115:      In the y.output file, the actions are  referred  to  by
                    116:      created  nonterminal  names  of  the  form  $$nnn.  All
                    117:      actions within rules are assumed to  be  distinct.   If
                    118:      some   actions   are   the   same,  Yacc  might  report
                    119:      reduce/reduce conflicts  which  could  be  resolved  by
                    120:      explicitly  identifying  identical actions; does anyone
                    121:      have a good idea for a syntax to do this?  The  =  sign
                    122:      may  now be omitted in action constructions of the form
                    123:      ={  ...   }.
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: 
                    130:                       January 14, 1977
                    131: 
                    132: 
                    133: 
                    134: 
                    135: 
                    136:                            - 3 -
                    137: 
                    138: 
                    139: 
                    140: 4.   As a result of the rearrangement of rules,  people  who
                    141:      thought they knew what $1 really turned into, and wrote
                    142:      programs which referred to yypv[1], etc., are in  trou-
                    143:      ble.  See Steve Johnson if you are really suffering.
                    144: 
                    145: 
                    146: 
                    147: 
                    148: 
                    149: 
                    150: 
                    151: 
                    152: 
                    153: 
                    154: 
                    155: 
                    156: 
                    157: 
                    158: 
                    159: 
                    160: 
                    161: 
                    162: 
                    163: 
                    164: 
                    165: 
                    166: 
                    167: 
                    168: 
                    169: 
                    170: 
                    171: 
                    172: 
                    173: 
                    174: 
                    175: 
                    176: 
                    177: 
                    178: 
                    179: 
                    180: 
                    181: 
                    182: 
                    183: 
                    184: 
                    185: 
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 
                    191: 
                    192: 
                    193: 
                    194: 
                    195: 
                    196:                       January 14, 1977
                    197: 
                    198: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.