|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.