• Russ Cox's avatar
    cmd/yacc: fix parsing of character tokens · bfebf9ea
    Russ Cox authored
    From issue 7967 I learned:
    
    1) yacc accepts either 'x' or "x" to mean token value 0x78
    2) yacc also accepts 'xyz' and "XYZ" to mean token value 0x78
    
    Use strconv.Unquote to simplify the handling of quoted
    strings and check that each has only one rune.
    
    Although this does clean things up, it makes 'x' and "x"
    treated as different internally (now they are stored as
    `'x'` and `"x"`; before they were both ` x`). Grammars that
    use both interchangeably will now die with an error
    similar to the one from issue 7967:
    
            yacc bug -- cannot have 2 different Ts with same value
                    "+" and '+'
    
    The echoing of the quotes should make clear what is going on.
    
    The other semantic change caused by using strconv.Unquote
    is that '\"' and "\'" are no longer valid. Like in Go, they must be
    spelled without the backslash: '"' and "'".
    
    On the other hand, now yacc and Go agree about what character
    and string literals mean.
    
    LGTM=r
    R=r
    CC=golang-codereviews
    https://golang.org/cl/149110043
    bfebf9ea
Name
Last commit
Last update
..
testdata/expr Loading commit data...
doc.go Loading commit data...
yacc.go Loading commit data...