• Robert Griesemer's avatar
    cmd/compile/internal/gc: recursive-descent parser · b569b87c
    Robert Griesemer authored
    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: 's avatarRuss Cox <rsc@golang.org>
    b569b87c
semi4.go 334 Bytes