]> Cypherpunks repositories - gostls13.git/commit
cmd/compile/internal/gc: recursive-descent parser
authorRobert Griesemer <gri@golang.org>
Wed, 4 Nov 2015 17:21:49 +0000 (09:21 -0800)
committerRuss Cox <rsc@golang.org>
Fri, 13 Nov 2015 14:53:57 +0000 (14:53 +0000)
commitb569b87ca1f6905ed38cafc2bae6e26f4ec416b7
tree40809baaf4b3cde32d2c87c84382fb6dba3e2740
parentb5c1b5d7a035d589c5a970f17b7e0c52441d5d34
cmd/compile/internal/gc: recursive-descent parser

This is a translation of the yacc-based parser with adjustements
to make the grammar work for a recursive-descent parser followed
by cleanups and simplifications.

The yacc actions were mostly literally copied for correctness
with better temporary names.

A few of the syntax tests were adjusted for slightly different
error messages (it is very difficult to match the yacc-based
error messages in all cases, and sometimes the new parser could
produce better errors).

The new parser is enabled by default.
To switch back to the yacc-based parser, set -oldparser.
To hardwire the switch back, uncomment "oldparser = 1" in lex.go.

- passes all.bash
- ~18% reduced parse time per file on average for make.bash
- ~3% reduced compile time for building cmd/compile

Change-Id: Icb5651bb9d8b9f66261762d2c94a03793050d4ce
Reviewed-on: https://go-review.googlesource.com/16665
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/lex.go
src/cmd/compile/internal/gc/parser.go [new file with mode: 0644]
src/cmd/compile/internal/gc/subr.go
test/fixedbugs/bug358.go
test/syntax/chan.go
test/syntax/forvar.go
test/syntax/semi4.go
test/syntax/semi6.go
test/syntax/semi7.go
test/syntax/vareq1.go