]> Cypherpunks repositories - gostls13.git/commitdiff
gc: support for building with Plan 9 yacc
authorAnthony Martin <ality@pbrane.org>
Wed, 16 Nov 2011 21:58:02 +0000 (16:58 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 16 Nov 2011 21:58:02 +0000 (16:58 -0500)
I've modified Plan 9's yacc to work with
the grammar in go.y.  These are the only
changes necessary on the Go side.

R=rsc
CC=golang-dev
https://golang.org/cl/5375104

src/cmd/gc/bisonerrors
src/cmd/gc/go.h

index 5110f5350ce15f186b7b168912a448b1b06fdc97..0f865d086c99f1f20577a858d7f14a74c20e3297 100755 (executable)
@@ -46,24 +46,36 @@ bison && /^state 0/ { grammar = 0; states = 1 }
 states && /^state / { state = $2 }
 states { statetext[state] = statetext[state] $0 "\n" }
 
-states && / shift, and go to state/ {
+states && / shift/ {
        n = nshift[state]++
-       shift[state,n] = $7
+       if($0 ~ /and go to/)
+               shift[state,n] = $7 # GNU Bison
+       else
+               shift[state,n] = $3 # Plan 9 Yacc
        shifttoken[state,n] = $1
        next
 }
-states && / go to state/ {
+states && / (go to|goto)/ {
        n = nshift[state]++
-       shift[state,n] = $5
+       if($0 ~ /go to/)
+               shift[state,n] = $5 # GNU Bison
+       else
+               shift[state,n] = $3 # Plan 9 Yacc
        shifttoken[state,n] = $1
        next
 }
-states && / reduce using rule/ {
+states && / reduce/ {
        n = nreduce[state]++
-       reduce[state,n] = $5
+       if($0 ~ /reduce using rule/)
+               reduce[state,n] = $5 # GNU Bison
+       else
+               reduce[state,n] = $3 # Plan 9 yacc
        reducetoken[state,n] = $1
        next
-}      
+}
+
+# Skip over the summary information printed by Plan 9 yacc.
+/nonterminals$/,/^maximum spread/ { next }
 
 # First // comment marks the beginning of the pattern file.
 /^\/\// { bison = 0; grammar = 0; state = 0 }
@@ -96,7 +108,8 @@ $1 == "%" {
                if(found)
                        continue
                for(j=0; j<nreduce[state]; j++) {
-                       if(reducetoken[state,j] == tok || reducetoken[state,j] == "$default") {
+                       t = reducetoken[state,j]
+                       if(t == tok || t == "$default" || t == ".") {
                                stack[nstack++] = state
                                rule = reduce[state,j]
                                nstack -= rulesize[rule]
index a473c2fb504184acb77a5b9f2060330692c0be9c..217456c9a4bde57bd7070fef882d117fcc67cf71 100644 (file)
 
 #undef BUFSIZ
 
+// The parser's maximum stack size.
+// We have to use a #define macro here since yacc
+// or bison will check for its definition and use
+// a potentially smaller value if it is undefined.
+#define YYMAXDEPTH 500
+
 enum
 {
        NHUNK           = 50000,
@@ -23,7 +29,6 @@ enum
        NSYMB           = 500,
        NHASH           = 1024,
        STRINGSZ        = 200,
-       YYMAXDEPTH      = 500,
        MAXALIGN        = 7,
        UINF            = 100,
        HISTSZ          = 10,