yacc: fixes and support for the Go grammar This description is an elaboration of the one in my mail sent to 9fans¹. There were two small bugs in the patch that I posted. I sent these changes to the NIX development mailing list for review² and in December they were committed to the NIX codebase. I've tested this change on all the .y files in /sys/src/cmd and it appears to work fine. 1. The %error-verbose directive implemented by GNU Bison is ignored. 2. A description of the final grammar is printed before the state descriptions in y.output. This is needed to produce the fancy error messages that Russ added to the Go compiler. 3. The 'x' format for character literals is now used instead of prefixing with a space. This was the easiest way to appease the Go code in src/cmd/gc/lex.c:/yytfix. I also think it makes error messages look nicer. 4. The YYEMPTY define is now used to clear the lookahead token (instead of an explicit -1). Bison uses -2 for this purpose and the Go compiler depends on this value to determine the correct line number for parse errors. 5. yychar and yystate are now globals so they can be inspected by external code. This is the second part of the change to support Go's fancy error messages. 6. C++ style comments are handled in actions. 7. YYERROR is now also defined in /sys/lib/yaccpar. Also, it's important that the yacc binaries are updated before trying to build the whole tree since the parser files now expect the YYEMPTY definition in y.tab.c. Notes: 1. http://9fans.net/archive/2011/11/81 2. http://codereview.appspot.com/5415048 3. http://code.google.com/p/nix-os/source/detail?r=3dd2bfb35f81