nyacc: updates for cpp-ok/not-ok
[mes.git] / module / nyacc / lang / c99 / mach.d / c99xact.scm
index d59c8c64e32918b62b176a46041e26f638508564..84458dbef8394d63c12359befe0b7bf5c9f01093 100644 (file)
    (lambda ($3 $2 $1 . $rest) (list 'array-dsgr $2))
    ;; designator => "." identifier
    (lambda ($2 $1 . $rest) (list 'sel-dsgr $2))
-   ;; statement => labeled-statement
+   ;; statement => $P2 statement-1
+   (lambda ($2 $1 . $rest) $2)
+   ;; $P2 => 
+   (lambda $rest (cpp-ok!))
+   ;; statement-1 => labeled-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => compound-statement
+   ;; statement-1 => compound-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => expression-statement
+   ;; statement-1 => expression-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => selection-statement
+   ;; statement-1 => selection-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => iteration-statement
+   ;; statement-1 => iteration-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => jump-statement
+   ;; statement-1 => jump-statement
    (lambda ($1 . $rest) $1)
-   ;; statement => cpp-statement
+   ;; statement-1 => cpp-statement
    (lambda ($1 . $rest) $1)
    ;; labeled-statement => identifier ":" statement
    (lambda ($3 $2 $1 . $rest)
    (lambda ($3 $2 $1 . $rest) `(return ,$2))
    ;; jump-statement => "return" ";"
    (lambda ($2 $1 . $rest) `(return (expr)))
-   ;; translation-unit => external-declaration-proxy
+   ;; translation-unit => external-declaration
    (lambda ($1 . $rest) (make-tl 'trans-unit $1))
-   ;; translation-unit => translation-unit external-declaration-proxy
+   ;; translation-unit => translation-unit external-declaration
    (lambda ($2 $1 . $rest)
-     (cond ((eqv? 'trans-unit (car $2))
-            (let* ((t1 (tl-append $1 '(extern-C-begin)))
-                   (t2 (tl-extend t1 (cdr $2)))
-                   (t3 (tl-append t2 '(extern-C-end))))
-              t3))
-           (else (tl-append $1 $2))))
-   ;; external-declaration-proxy => $P2 external-declaration
+     (if (eqv? (sx-tag $2) 'extern-block)
+       (tl-extend $1 (sx-tail $2))
+       (tl-append $1 $2)))
+   ;; external-declaration => $P3 external-declaration-1
    (lambda ($2 $1 . $rest) $2)
-   ;; $P2 => 
-   (lambda $rest (at-top!))
-   ;; external-declaration => function-definition
+   ;; $P3 => 
+   (lambda $rest (cpp-ok!))
+   ;; external-declaration-1 => function-definition
    (lambda ($1 . $rest) $1)
-   ;; external-declaration => declaration
+   ;; external-declaration-1 => declaration
    (lambda ($1 . $rest) $1)
-   ;; external-declaration => lone-comment
+   ;; external-declaration-1 => lone-comment
    (lambda ($1 . $rest) $1)
-   ;; external-declaration => cpp-statement
+   ;; external-declaration-1 => cpp-statement
    (lambda ($1 . $rest) $1)
-   ;; external-declaration => "extern" '$string "{" translation-unit "}"
-   (lambda ($5 $4 $3 $2 $1 . $rest) (tl->list $4))
+   ;; external-declaration-1 => "extern" '$string "{" translation-unit "}"
+   (lambda ($5 $4 $3 $2 $1 . $rest)
+     `(extern-block
+        $2
+        (extern-C-begin)
+        $4
+        (extern-C-end)))
    ;; function-definition => declaration-specifiers declarator declaration-...
    (lambda ($4 $3 $2 $1 . $rest)
      `(knr-fctn-defn