12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082 |
- ;; c99x-act.scm
- ;; Copyright (C) 2016-2018 Matthew R. Wette
- ;;
- ;; This library is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU Lesser General Public
- ;; License as published by the Free Software Foundation; either
- ;; version 3 of the License, or (at your option) any later version.
- ;; See the file COPYING included with the this distribution.
- (define c99x-act-v
- (vector
- ;; $start => expression
- (lambda ($1 . $rest) $1)
- ;; primary-expression => identifier
- (lambda ($1 . $rest) `(p-expr ,$1))
- ;; primary-expression => constant
- (lambda ($1 . $rest) `(p-expr ,$1))
- ;; primary-expression => string-literal
- (lambda ($1 . $rest) `(p-expr ,$1))
- ;; primary-expression => "(" expression ")"
- (lambda ($3 $2 $1 . $rest) $2)
- ;; primary-expression => "(" "{" $P1 block-item-list $P2 "}" ")"
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(stmt-expr (@ (extension "GNUC")) ,$4))
- ;; $P1 =>
- (lambda ($2 $1 . $rest) (cpi-push))
- ;; $P2 =>
- (lambda ($4 $3 $2 $1 . $rest) (cpi-pop))
- ;; postfix-expression => primary-expression
- (lambda ($1 . $rest) $1)
- ;; postfix-expression => postfix-expression "[" expression "]"
- (lambda ($4 $3 $2 $1 . $rest)
- `(array-ref ,$3 ,$1))
- ;; postfix-expression => postfix-expression "(" argument-expression-list...
- (lambda ($4 $3 $2 $1 . $rest)
- `(fctn-call ,$1 ,(tl->list $3)))
- ;; postfix-expression => postfix-expression "(" ")"
- (lambda ($3 $2 $1 . $rest)
- `(fctn-call ,$1 (expr-list)))
- ;; postfix-expression => postfix-expression "." identifier
- (lambda ($3 $2 $1 . $rest) `(d-sel ,$3 ,$1))
- ;; postfix-expression => postfix-expression "->" identifier
- (lambda ($3 $2 $1 . $rest) `(i-sel ,$3 ,$1))
- ;; postfix-expression => postfix-expression "++"
- (lambda ($2 $1 . $rest) `(post-inc ,$1))
- ;; postfix-expression => postfix-expression "--"
- (lambda ($2 $1 . $rest) `(post-dec ,$1))
- ;; postfix-expression => "(" type-name ")" "{" initializer-list "}"
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(comp-lit ,$2 ,(tl->list $5)))
- ;; postfix-expression => "(" type-name ")" "{" initializer-list "," "}"
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(comp-lit ,$2 ,(tl->list $5)))
- ;; argument-expression-list => assignment-expression
- (lambda ($1 . $rest) (make-tl 'expr-list $1))
- ;; argument-expression-list => argument-expression-list "," assignment-e...
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; argument-expression-list => arg-expr-hack
- (lambda ($1 . $rest) (make-tl 'expr-list $1))
- ;; argument-expression-list => argument-expression-list "," arg-expr-hack
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; arg-expr-hack => declaration-specifiers abstract-declarator
- (lambda ($2 $1 . $rest)
- `(param-decl ,(tl->list $1) $2))
- ;; arg-expr-hack => declaration-specifiers
- (lambda ($1 . $rest)
- `(param-decl ,(tl->list $1)))
- ;; unary-expression => postfix-expression
- (lambda ($1 . $rest) $1)
- ;; unary-expression => "++" unary-expression
- (lambda ($2 $1 . $rest) `(pre-inc ,$2))
- ;; unary-expression => "--" unary-expression
- (lambda ($2 $1 . $rest) `(pre-dec ,$2))
- ;; unary-expression => unary-operator cast-expression
- (lambda ($2 $1 . $rest) (list $1 $2))
- ;; unary-expression => "sizeof" unary-expression
- (lambda ($2 $1 . $rest) `(sizeof-expr ,$2))
- ;; unary-expression => "sizeof" "(" type-name ")"
- (lambda ($4 $3 $2 $1 . $rest) `(sizeof-type ,$3))
- ;; unary-operator => "&"
- (lambda ($1 . $rest) 'ref-to)
- ;; unary-operator => "*"
- (lambda ($1 . $rest) 'de-ref)
- ;; unary-operator => "+"
- (lambda ($1 . $rest) 'pos)
- ;; unary-operator => "-"
- (lambda ($1 . $rest) 'neg)
- ;; unary-operator => "~"
- (lambda ($1 . $rest) 'bitwise-not)
- ;; unary-operator => "!"
- (lambda ($1 . $rest) 'not)
- ;; cast-expression => unary-expression
- (lambda ($1 . $rest) $1)
- ;; cast-expression => "(" type-name ")" cast-expression
- (lambda ($4 $3 $2 $1 . $rest) `(cast ,$2 ,$4))
- ;; multiplicative-expression => cast-expression
- (lambda ($1 . $rest) $1)
- ;; multiplicative-expression => multiplicative-expression "*" cast-expre...
- (lambda ($3 $2 $1 . $rest) `(mul ,$1 ,$3))
- ;; multiplicative-expression => multiplicative-expression "/" cast-expre...
- (lambda ($3 $2 $1 . $rest) `(div ,$1 ,$3))
- ;; multiplicative-expression => multiplicative-expression "%" cast-expre...
- (lambda ($3 $2 $1 . $rest) `(mod ,$1 ,$3))
- ;; additive-expression => multiplicative-expression
- (lambda ($1 . $rest) $1)
- ;; additive-expression => additive-expression "+" multiplicative-expression
- (lambda ($3 $2 $1 . $rest) `(add ,$1 ,$3))
- ;; additive-expression => additive-expression "-" multiplicative-expression
- (lambda ($3 $2 $1 . $rest) `(sub ,$1 ,$3))
- ;; shift-expression => additive-expression
- (lambda ($1 . $rest) $1)
- ;; shift-expression => shift-expression "<<" additive-expression
- (lambda ($3 $2 $1 . $rest) `(lshift ,$1 ,$3))
- ;; shift-expression => shift-expression ">>" additive-expression
- (lambda ($3 $2 $1 . $rest) `(rshift ,$1 ,$3))
- ;; relational-expression => shift-expression
- (lambda ($1 . $rest) $1)
- ;; relational-expression => relational-expression "<" shift-expression
- (lambda ($3 $2 $1 . $rest) `(lt ,$1 ,$3))
- ;; relational-expression => relational-expression ">" shift-expression
- (lambda ($3 $2 $1 . $rest) `(gt ,$1 ,$3))
- ;; relational-expression => relational-expression "<=" shift-expression
- (lambda ($3 $2 $1 . $rest) `(le ,$1 ,$3))
- ;; relational-expression => relational-expression ">=" shift-expression
- (lambda ($3 $2 $1 . $rest) `(ge ,$1 ,$3))
- ;; equality-expression => relational-expression
- (lambda ($1 . $rest) $1)
- ;; equality-expression => equality-expression "==" relational-expression
- (lambda ($3 $2 $1 . $rest) `(eq ,$1 ,$3))
- ;; equality-expression => equality-expression "!=" relational-expression
- (lambda ($3 $2 $1 . $rest) `(ne ,$1 ,$3))
- ;; bitwise-and-expression => equality-expression
- (lambda ($1 . $rest) $1)
- ;; bitwise-and-expression => bitwise-and-expression "&" equality-expression
- (lambda ($3 $2 $1 . $rest)
- `(bitwise-and ,$1 ,$3))
- ;; bitwise-xor-expression => bitwise-and-expression
- (lambda ($1 . $rest) $1)
- ;; bitwise-xor-expression => bitwise-xor-expression "^" bitwise-and-expr...
- (lambda ($3 $2 $1 . $rest)
- `(bitwise-xor ,$1 ,$3))
- ;; bitwise-or-expression => bitwise-xor-expression
- (lambda ($1 . $rest) $1)
- ;; bitwise-or-expression => bitwise-or-expression "|" bitwise-xor-expres...
- (lambda ($3 $2 $1 . $rest) `(bitwise-or ,$1 ,$3))
- ;; logical-and-expression => bitwise-or-expression
- (lambda ($1 . $rest) $1)
- ;; logical-and-expression => logical-and-expression "&&" bitwise-or-expr...
- (lambda ($3 $2 $1 . $rest) `(and ,$1 ,$3))
- ;; logical-or-expression => logical-and-expression
- (lambda ($1 . $rest) $1)
- ;; logical-or-expression => logical-or-expression "||" logical-and-expre...
- (lambda ($3 $2 $1 . $rest) `(or ,$1 ,$3))
- ;; conditional-expression => logical-or-expression
- (lambda ($1 . $rest) $1)
- ;; conditional-expression => logical-or-expression "?" expression ":" co...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(cond-expr ,$1 ,$3 ,$5))
- ;; assignment-expression => conditional-expression
- (lambda ($1 . $rest) $1)
- ;; assignment-expression => unary-expression assignment-operator assignm...
- (lambda ($3 $2 $1 . $rest)
- `(assn-expr ,$1 (op ,$2) ,$3))
- ;; assignment-operator => "="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "+="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "-="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "*="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "/="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "%="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "<<="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => ">>="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "&="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "^="
- (lambda ($1 . $rest) $1)
- ;; assignment-operator => "|="
- (lambda ($1 . $rest) $1)
- ;; expression => assignment-expression
- (lambda ($1 . $rest) $1)
- ;; expression => expression "," assignment-expression
- (lambda ($3 $2 $1 . $rest)
- (if (eqv? 'comma-expr (sx-tag $1))
- (append $1 (list $3))
- `(comma-expr ,$1 ,$3)))
- ;; constant-expression => conditional-expression
- (lambda ($1 . $rest) $1)
- ;; declaration => declaration-no-comment ";"
- (lambda ($2 $1 . $rest) $1)
- ;; declaration => declaration-no-comment ";" code-comment
- (lambda ($3 $2 $1 . $rest) (sx-attr-add $1 $3))
- ;; declaration-no-comment => declaration-specifiers init-declarator-list
- (lambda ($2 $1 . $rest)
- (save-typenames `(decl ,$1 ,$2)))
- ;; declaration-no-comment => declaration-specifiers
- (lambda ($1 . $rest) `(decl ,$1))
- ;; declaration-specifiers => declaration-specifiers-1
- (lambda ($1 . $rest)
- (process-specs (tl->list $1)))
- ;; declaration-specifiers-1 => storage-class-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; declaration-specifiers-1 => storage-class-specifier declaration-speci...
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; declaration-specifiers-1 => type-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; declaration-specifiers-1 => type-specifier declaration-specifiers-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; declaration-specifiers-1 => type-qualifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; declaration-specifiers-1 => type-qualifier declaration-specifiers-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; declaration-specifiers-1 => function-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; declaration-specifiers-1 => function-specifier declaration-specifiers-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; declaration-specifiers-1 => attribute-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; declaration-specifiers-1 => attribute-specifier declaration-specifiers-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; storage-class-specifier => "auto"
- (lambda ($1 . $rest) '(stor-spec (auto)))
- ;; storage-class-specifier => "extern"
- (lambda ($1 . $rest) '(stor-spec (extern)))
- ;; storage-class-specifier => "register"
- (lambda ($1 . $rest) '(stor-spec (register)))
- ;; storage-class-specifier => "static"
- (lambda ($1 . $rest) '(stor-spec (static)))
- ;; storage-class-specifier => "typedef"
- (lambda ($1 . $rest) '(stor-spec (typedef)))
- ;; type-specifier => "void"
- (lambda ($1 . $rest) '(type-spec (void)))
- ;; type-specifier => fixed-type-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => float-type-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => fixpt-type-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => "_Bool"
- (lambda ($1 . $rest)
- '(type-spec (fixed-type "_Bool")))
- ;; type-specifier => complex-type-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => struct-or-union-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => enum-specifier
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; type-specifier => typedef-name
- (lambda ($1 . $rest) `(type-spec ,$1))
- ;; fixed-type-specifier => "short"
- (lambda ($1 . $rest) '(fixed-type "short"))
- ;; fixed-type-specifier => "short" "int"
- (lambda ($2 $1 . $rest)
- '(fixed-type "short int"))
- ;; fixed-type-specifier => "signed" "short"
- (lambda ($2 $1 . $rest)
- '(fixed-type "signed short"))
- ;; fixed-type-specifier => "signed" "short" "int"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "signed short int"))
- ;; fixed-type-specifier => "int"
- (lambda ($1 . $rest) '(fixed-type "int"))
- ;; fixed-type-specifier => "signed"
- (lambda ($1 . $rest) '(fixed-type "signed"))
- ;; fixed-type-specifier => "signed" "int"
- (lambda ($2 $1 . $rest)
- '(fixed-type "signed int"))
- ;; fixed-type-specifier => "long"
- (lambda ($1 . $rest) '(fixed-type "long"))
- ;; fixed-type-specifier => "long" "int"
- (lambda ($2 $1 . $rest) '(fixed-type "long int"))
- ;; fixed-type-specifier => "signed" "long"
- (lambda ($2 $1 . $rest)
- '(fixed-type "signed long"))
- ;; fixed-type-specifier => "signed" "long" "int"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "signed long int"))
- ;; fixed-type-specifier => "long" "long"
- (lambda ($2 $1 . $rest)
- '(fixed-type "long long"))
- ;; fixed-type-specifier => "long" "long" "int"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "long long int"))
- ;; fixed-type-specifier => "signed" "long" "long"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "signed long long"))
- ;; fixed-type-specifier => "signed" "long" "long" "int"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixed-type "signed long long int"))
- ;; fixed-type-specifier => "unsigned" "short" "int"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "unsigned short int"))
- ;; fixed-type-specifier => "unsigned" "short"
- (lambda ($2 $1 . $rest)
- '(fixed-type "unsigned short"))
- ;; fixed-type-specifier => "unsigned" "int"
- (lambda ($2 $1 . $rest)
- '(fixed-type "unsigned int"))
- ;; fixed-type-specifier => "unsigned"
- (lambda ($1 . $rest) '(fixed-type "unsigned"))
- ;; fixed-type-specifier => "unsigned" "long" "int"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "unsigned long"))
- ;; fixed-type-specifier => "unsigned" "long"
- (lambda ($2 $1 . $rest)
- '(fixed-type "unsigned long"))
- ;; fixed-type-specifier => "unsigned" "long" "long" "int"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixed-type "unsigned long long int"))
- ;; fixed-type-specifier => "unsigned" "long" "long"
- (lambda ($3 $2 $1 . $rest)
- '(fixed-type "unsigned long long"))
- ;; fixed-type-specifier => "char"
- (lambda ($1 . $rest) '(fixed-type "char"))
- ;; fixed-type-specifier => "signed" "char"
- (lambda ($2 $1 . $rest)
- '(fixed-type "signed char"))
- ;; fixed-type-specifier => "unsigned" "char"
- (lambda ($2 $1 . $rest)
- '(fixed-type "unsigned char"))
- ;; float-type-specifier => "float"
- (lambda ($1 . $rest) '(float-type "float"))
- ;; float-type-specifier => "double"
- (lambda ($1 . $rest) '(float-type "double"))
- ;; float-type-specifier => "long" "double"
- (lambda ($2 $1 . $rest)
- '(float-type "long double"))
- ;; complex-type-specifier => "_Complex"
- (lambda ($1 . $rest) '(complex-type "_Complex"))
- ;; complex-type-specifier => "float" "_Complex"
- (lambda ($2 $1 . $rest)
- '(complex-type "float _Complex"))
- ;; complex-type-specifier => "double" "_Complex"
- (lambda ($2 $1 . $rest)
- '(complex-type "double _Complex"))
- ;; complex-type-specifier => "long" "double" "_Complex"
- (lambda ($3 $2 $1 . $rest)
- '(complex-type "long double _Complex"))
- ;; fixpt-type-specifier => "short" "_Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "short _Fract"))
- ;; fixpt-type-specifier => "_Fract"
- (lambda ($1 . $rest) '(fixpt-type "_Fract"))
- ;; fixpt-type-specifier => "long" "_Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "long _Fract"))
- ;; fixpt-type-specifier => "signed" "short" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "signd short _Fract"))
- ;; fixpt-type-specifier => "signed" "_Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "signed _Fract"))
- ;; fixpt-type-specifier => "signed" "long _Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "signed long _Fract"))
- ;; fixpt-type-specifier => "unsigned" "short" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "unsigned short _Fract"))
- ;; fixpt-type-specifier => "unsigned" "_Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "unsigned _Fract"))
- ;; fixpt-type-specifier => "unsigned" "long _Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "unsigned long _Fract"))
- ;; fixpt-type-specifier => "short" "_Accum"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "short _Accum"))
- ;; fixpt-type-specifier => "_Accum"
- (lambda ($1 . $rest) '(fixpt-type "_Accum"))
- ;; fixpt-type-specifier => "long _Accum"
- (lambda ($1 . $rest) '(fixpt-type "long _Accum"))
- ;; fixpt-type-specifier => "signed" "short" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "signd short _Accum"))
- ;; fixpt-type-specifier => "signed" "_Accum"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "signed _Accum"))
- ;; fixpt-type-specifier => "signed" "long" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "signed long _Accum"))
- ;; fixpt-type-specifier => "unsigned" "short" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "unsigned short _Accum"))
- ;; fixpt-type-specifier => "unsigned" "_Accum"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "unsigned _Accum"))
- ;; fixpt-type-specifier => "unsigned" "long" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "unsigned long _Accum"))
- ;; fixpt-type-specifier => "_Sat" "short" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat short _Fract"))
- ;; fixpt-type-specifier => "_Sat" "_Fract"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "_Sat _Fract"))
- ;; fixpt-type-specifier => "_Sat" "long" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat long _Fract"))
- ;; fixpt-type-specifier => "_Sat" "signed" "short" "_Fract"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat signd short _Fract"))
- ;; fixpt-type-specifier => "_Sat" "signed" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat signed _Fract"))
- ;; fixpt-type-specifier => "_Sat" "signed" "long _Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat signed long _Fract"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "short" "_Fract"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned short _Fract"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "_Fract"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned _Fract"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "long" "_Fract"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned long _Fract"))
- ;; fixpt-type-specifier => "_Sat" "short" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat short _Accum"))
- ;; fixpt-type-specifier => "_Sat" "_Accum"
- (lambda ($2 $1 . $rest)
- '(fixpt-type "_Sat _Accum"))
- ;; fixpt-type-specifier => "_Sat" "long" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat long _Accum"))
- ;; fixpt-type-specifier => "_Sat" "signed" "short" "_Accum"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat signd short _Accum"))
- ;; fixpt-type-specifier => "_Sat" "signed" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat signed _Accum"))
- ;; fixpt-type-specifier => "_Sat" "signed" "long" "_Accum"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat signed long _Accum"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "short" "_Accum"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned short _Accum"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "_Accum"
- (lambda ($3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned _Accum"))
- ;; fixpt-type-specifier => "_Sat" "unsigned" "long" "_Accum"
- (lambda ($4 $3 $2 $1 . $rest)
- '(fixpt-type "_Sat unsigned long _Accum"))
- ;; struct-or-union-specifier => "struct" opt-attr-specs ident-like "{" s...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- (sx-join* 'struct-def $2 $3 (tl->list $5)))
- ;; struct-or-union-specifier => "struct" opt-attr-specs "{" struct-decla...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- (sx-join* 'struct-def $2 (tl->list $4)))
- ;; struct-or-union-specifier => "struct" opt-attr-specs ident-like
- (lambda ($3 $2 $1 . $rest)
- (sx-join* 'struct-ref $1 $3))
- ;; struct-or-union-specifier => "union" opt-attr-specs ident-like "{" st...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- (sx-join* 'union-def $2 $3 (tl->list $5)))
- ;; struct-or-union-specifier => "union" opt-attr-specs "{" struct-declar...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- (sx-join* 'union-def $2 (tl->list $4)))
- ;; struct-or-union-specifier => "union" opt-attr-specs ident-like
- (lambda ($3 $2 $1 . $rest)
- (sx-join* 'union-ref $2 $3))
- ;; ident-like => identifier
- (lambda ($1 . $rest) $1)
- ;; ident-like => typedef-name
- (lambda ($1 . $rest) `(ident ,(sx-ref $1 1)))
- ;; opt-attr-specs =>
- (lambda $rest (list))
- ;; opt-attr-specs => attribute-specifiers
- (lambda ($1 . $rest) `(@ ,(attrl->attrs $1)))
- ;; struct-declaration-list => struct-declaration
- (lambda ($1 . $rest) (make-tl 'field-list $1))
- ;; struct-declaration-list => lone-comment
- (lambda ($1 . $rest) (make-tl 'field-list $1))
- ;; struct-declaration-list => struct-declaration-list struct-declaration
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; struct-declaration-list => struct-declaration-list lone-comment
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; struct-declaration-list => ";"
- (lambda ($1 . $rest) (make-tl 'field-list))
- ;; struct-declaration-list => struct-declaration-list ";"
- (lambda ($2 $1 . $rest) $1)
- ;; struct-declaration => struct-declaration-no-comment ";"
- (lambda ($2 $1 . $rest) $1)
- ;; struct-declaration => struct-declaration-no-comment ";" code-comment
- (lambda ($3 $2 $1 . $rest) (sx-attr-add $1 $3))
- ;; struct-declaration-no-comment => specifier-qualifier-list struct-decl...
- (lambda ($2 $1 . $rest)
- `(comp-decl ,$1 ,(tl->list $2)))
- ;; struct-declaration-no-comment => specifier-qualifier-list
- (lambda ($1 . $rest) `(comp-decl ,$1))
- ;; specifier-qualifier-list => specifier-qualifier-list-1
- (lambda ($1 . $rest)
- (process-specs (tl->list $1)))
- ;; specifier-qualifier-list-1 => type-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; specifier-qualifier-list-1 => type-specifier specifier-qualifier-list-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; specifier-qualifier-list-1 => type-qualifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; specifier-qualifier-list-1 => type-qualifier specifier-qualifier-list-1
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; specifier-qualifier-list-1 => attribute-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; specifier-qualifier-list-1 => attribute-specifier specifier-qualifier...
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; specifier-qualifier-list/no-attr => specifier-qualifier-list/no-attr-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; specifier-qualifier-list/no-attr-1 => type-specifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; specifier-qualifier-list/no-attr-1 => type-specifier specifier-qualif...
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; specifier-qualifier-list/no-attr-1 => type-qualifier
- (lambda ($1 . $rest)
- (make-tl 'decl-spec-list $1))
- ;; specifier-qualifier-list/no-attr-1 => type-qualifier specifier-qualif...
- (lambda ($2 $1 . $rest) (tl-insert $2 $1))
- ;; struct-declarator-list => struct-declarator
- (lambda ($1 . $rest)
- (make-tl 'comp-declr-list $1))
- ;; struct-declarator-list => struct-declarator-list "," struct-declarator
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; struct-declarator-list => struct-declarator-list "," attribute-specif...
- (lambda ($4 $3 $2 $1 . $rest)
- (tl-append $1 $3 $4))
- ;; struct-declarator => struct-declarator-1
- (lambda ($1 . $rest) (process-declr $1))
- ;; struct-declarator-1 => declarator
- (lambda ($1 . $rest) `(comp-declr ,$1))
- ;; struct-declarator-1 => declarator attribute-specifiers
- (lambda ($2 $1 . $rest) `(comp-declr ,$1 ,$2))
- ;; struct-declarator-1 => declarator ":" constant-expression
- (lambda ($3 $2 $1 . $rest)
- `(comp-declr (bit-field ,$1 ,$3)))
- ;; struct-declarator-1 => ":" constant-expression
- (lambda ($2 $1 . $rest)
- `(comp-declr (bit-field ,$2)))
- ;; enum-specifier => "enum" ident-like "{" enumerator-list "}"
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(enum-def ,$2 ,(tl->list $4)))
- ;; enum-specifier => "enum" ident-like "{" enumerator-list "," "}"
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(enum-def ,$2 ,(tl->list $4)))
- ;; enum-specifier => "enum" "{" enumerator-list "}"
- (lambda ($4 $3 $2 $1 . $rest)
- `(enum-def ,(tl->list $3)))
- ;; enum-specifier => "enum" "{" enumerator-list "," "}"
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(enum-def ,(tl->list $3)))
- ;; enum-specifier => "enum" ident-like
- (lambda ($2 $1 . $rest) `(enum-ref ,$2))
- ;; enumerator-list => enumerator
- (lambda ($1 . $rest) (make-tl 'enum-def-list $1))
- ;; enumerator-list => enumerator-list "," enumerator
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; enumerator => identifier
- (lambda ($1 . $rest) `(enum-defn ,$1))
- ;; enumerator => identifier attribute-specifiers
- (lambda ($2 $1 . $rest) `(enum-defn ,$1 ,$2))
- ;; enumerator => identifier "=" constant-expression
- (lambda ($3 $2 $1 . $rest) `(enum-defn ,$1 ,$3))
- ;; type-qualifier => "const"
- (lambda ($1 . $rest) `(type-qual ,$1))
- ;; type-qualifier => "volatile"
- (lambda ($1 . $rest) `(type-qual ,$1))
- ;; type-qualifier => "restrict"
- (lambda ($1 . $rest) `(type-qual ,$1))
- ;; function-specifier => "inline"
- (lambda ($1 . $rest) `(fctn-spec ,$1))
- ;; function-specifier => "_Noreturn"
- (lambda ($1 . $rest) `(fctn-spec ,$1))
- ;; attribute-specifiers => attribute-specifier
- (lambda ($1 . $rest) $1)
- ;; attribute-specifiers => attribute-specifiers attribute-specifier
- (lambda ($2 $1 . $rest) (append $1 (cdr $2)))
- ;; attribute-specifier => "__attribute__" "(" "(" attribute-list ")" ")"
- (lambda ($6 $5 $4 $3 $2 $1 . $rest) $4)
- ;; attribute-specifier => attr-name
- (lambda ($1 . $rest)
- `(attribute-list (attribute ,$1)))
- ;; attr-name => "__packed__"
- (lambda ($1 . $rest) '(ident "__packed__"))
- ;; attr-name => "__aligned__"
- (lambda ($1 . $rest) '(ident "__aligned__"))
- ;; attr-name => "__alignof__"
- (lambda ($1 . $rest) '(ident "__alignof__"))
- ;; attribute-list => attribute-list-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; attribute-list-1 => attribute
- (lambda ($1 . $rest)
- (make-tl 'attribute-list $1))
- ;; attribute-list-1 => attribute-list-1 "," attribute
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; attribute-list-1 => attribute-list-1 ","
- (lambda ($2 $1 . $rest) $1)
- ;; attribute => attr-word
- (lambda ($1 . $rest) `(attribute ,$1))
- ;; attribute => attr-word "(" attr-expr-list ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(attribute ,$1 ,$3))
- ;; attribute => "const"
- (lambda ($1 . $rest)
- `(attribute (ident "const")))
- ;; attr-word => attr-name
- (lambda ($1 . $rest) $1)
- ;; attr-word => identifier
- (lambda ($1 . $rest) $1)
- ;; attr-expr-list => attr-expr-list-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; attr-expr-list-1 => attribute-expr
- (lambda ($1 . $rest)
- (make-tl 'attr-expr-list $1))
- ;; attr-expr-list-1 => attr-expr-list-1 "," attribute-expr
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; attribute-expr => type-name
- (lambda ($1 . $rest) $1)
- ;; attribute-expr => '$fixed
- (lambda ($1 . $rest) `(fixed ,$1))
- ;; attribute-expr => string-literal
- (lambda ($1 . $rest) $1)
- ;; attribute-expr => identifier
- (lambda ($1 . $rest) $1)
- ;; attribute-expr => attr-word "(" attr-expr-list ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(attribute ,$1 ,$3))
- ;; init-declarator-list => init-declarator-list-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; init-declarator-list-1 => init-declarator
- (lambda ($1 . $rest)
- (make-tl 'init-declr-list $1))
- ;; init-declarator-list-1 => init-declarator-list-1 "," init-declarator
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; init-declarator-list-1 => init-declarator-list-1 "," attribute-specif...
- (lambda ($4 $3 $2 $1 . $rest)
- (tl-append $1 $3 $4))
- ;; init-declarator => init-declarator-1
- (lambda ($1 . $rest) (process-declr $1))
- ;; init-declarator-1 => declarator
- (lambda ($1 . $rest) `(init-declr ,$1))
- ;; init-declarator-1 => declarator "=" initializer
- (lambda ($3 $2 $1 . $rest) `(init-declr ,$1 ,$3))
- ;; init-declarator-1 => declarator asm-expression
- (lambda ($2 $1 . $rest) `(init-declr ,$1 ,$2))
- ;; init-declarator-1 => declarator asm-expression "=" initializer
- (lambda ($4 $3 $2 $1 . $rest)
- `(init-declr ,$1 ,$2 ,$4))
- ;; init-declarator-1 => declarator attribute-specifiers
- (lambda ($2 $1 . $rest) `(init-declr ,$1 ,$2))
- ;; init-declarator-1 => declarator attribute-specifiers "=" initializer
- (lambda ($4 $3 $2 $1 . $rest)
- `(init-declr ,$1 ,$2 ,$4))
- ;; init-declarator-1 => declarator asm-expression attribute-specifiers
- (lambda ($3 $2 $1 . $rest)
- `(init-declr ,$1 ,$2 ,$3))
- ;; declarator => pointer direct-declarator
- (lambda ($2 $1 . $rest) `(ptr-declr ,$1 ,$2))
- ;; declarator => direct-declarator
- (lambda ($1 . $rest) $1)
- ;; pointer => "*" type-qualifier-list pointer
- (lambda ($3 $2 $1 . $rest) `(pointer ,$2 ,$3))
- ;; pointer => "*" type-qualifier-list
- (lambda ($2 $1 . $rest) `(pointer ,$2))
- ;; pointer => "*" pointer
- (lambda ($2 $1 . $rest) `(pointer ,$2))
- ;; pointer => "*" attribute-specifiers pointer
- (lambda ($3 $2 $1 . $rest) `(pointer ,$3))
- ;; pointer => "*"
- (lambda ($1 . $rest) '(pointer))
- ;; direct-declarator => identifier
- (lambda ($1 . $rest) $1)
- ;; direct-declarator => "(" declarator ")"
- (lambda ($3 $2 $1 . $rest) `(scope ,$2))
- ;; direct-declarator => "(" attribute-specifier declarator ")"
- (lambda ($4 $3 $2 $1 . $rest) `(scope ,$2))
- ;; direct-declarator => direct-declarator "[" type-qualifier-list assign...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,$3 ,$4))
- ;; direct-declarator => direct-declarator "[" type-qualifier-list "]"
- (lambda ($4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,$3))
- ;; direct-declarator => direct-declarator "[" assignment-expression "]"
- (lambda ($4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,$3))
- ;; direct-declarator => direct-declarator "[" "]"
- (lambda ($3 $2 $1 . $rest) `(array-of ,$1))
- ;; direct-declarator => direct-declarator "[" "static" type-qualifier-li...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,$4 ,$5))
- ;; direct-declarator => direct-declarator "[" type-qualifier-list "stati...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,4 ,$5))
- ;; direct-declarator => direct-declarator "[" type-qualifier-list "*" "]"
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(array-of ,$1 ,$3 (var-len)))
- ;; direct-declarator => direct-declarator "[" "*" "]"
- (lambda ($4 $3 $2 $1 . $rest)
- `(array-of ,$1 (var-len)))
- ;; direct-declarator => direct-declarator "(" parameter-type-list ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(ftn-declr ,$1 ,$3))
- ;; direct-declarator => direct-declarator "(" identifier-list ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(ftn-declr ,$1 ,$3))
- ;; direct-declarator => direct-declarator "(" ")"
- (lambda ($3 $2 $1 . $rest)
- `(ftn-declr ,$1 (param-list)))
- ;; type-qualifier-list => type-qualifier-list-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; type-qualifier-list-1 => type-qualifier
- (lambda ($1 . $rest)
- (make-tl 'type-qual-list $1))
- ;; type-qualifier-list-1 => type-qualifier-list-1 type-qualifier
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; parameter-type-list => parameter-list
- (lambda ($1 . $rest) (tl->list $1))
- ;; parameter-type-list => parameter-list "," "..."
- (lambda ($3 $2 $1 . $rest)
- (tl->list (tl-append $1 '(ellipsis))))
- ;; parameter-list => parameter-declaration
- (lambda ($1 . $rest) (make-tl 'param-list $1))
- ;; parameter-list => parameter-list "," parameter-declaration
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; parameter-declaration => declaration-specifiers declarator
- (lambda ($2 $1 . $rest)
- `(param-decl ,$1 (param-declr ,$2)))
- ;; parameter-declaration => declaration-specifiers abstract-declarator
- (lambda ($2 $1 . $rest)
- `(param-decl ,$1 (param-declr ,$2)))
- ;; parameter-declaration => declaration-specifiers
- (lambda ($1 . $rest) `(param-decl ,$1))
- ;; identifier-list => identifier-list-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; identifier-list-1 => identifier
- (lambda ($1 . $rest) (make-tl 'ident-list $1))
- ;; identifier-list-1 => identifier-list-1 "," identifier
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; type-name => specifier-qualifier-list/no-attr abstract-declarator
- (lambda ($2 $1 . $rest) `(type-name ,$1 ,$2))
- ;; type-name => declaration-specifiers
- (lambda ($1 . $rest) `(type-name ,$1))
- ;; abstract-declarator => pointer direct-abstract-declarator
- (lambda ($2 $1 . $rest) `(abs-declr ,$1 ,$2))
- ;; abstract-declarator => pointer
- (lambda ($1 . $rest) `(abs-declr ,$1))
- ;; abstract-declarator => direct-abstract-declarator
- (lambda ($1 . $rest) `(abs-declr ,$1))
- ;; direct-abstract-declarator => "(" abstract-declarator ")"
- (lambda ($3 $2 $1 . $rest) `(declr-scope ,$2))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" type-qua...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(declr-array ,$1 ,$3 ,$4))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" type-qua...
- (lambda ($4 $3 $2 $1 . $rest)
- `(declr-array ,$1 ,$3))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" assignme...
- (lambda ($4 $3 $2 $1 . $rest)
- `(declr-array ,$1 ,$3))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" "]"
- (lambda ($3 $2 $1 . $rest) `(declr-array ,$1))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" "static"...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(declr-array
- ,$1
- ,(tl->list (tl-insert $4 '(stor-spec "static")))
- ,$5))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" "static"...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(declr-array
- ,$1
- ,(tl->list (tl-insert $4 '(stor-spec "static")))))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" type-qua...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(declr-array
- ,$1
- ,(tl->list (tl-insert $3 '(stor-spec "static")))
- ,$5))
- ;; direct-abstract-declarator => "[" type-qualifier-list assignment-expr...
- (lambda ($4 $3 $2 $1 . $rest)
- `(declr-anon-array ,$2 ,$3))
- ;; direct-abstract-declarator => "[" type-qualifier-list "]"
- (lambda ($3 $2 $1 . $rest)
- `(declr-anon-array ,$2))
- ;; direct-abstract-declarator => "[" assignment-expression "]"
- (lambda ($3 $2 $1 . $rest)
- `(declr-anon-array ,$2))
- ;; direct-abstract-declarator => "[" "]"
- (lambda ($2 $1 . $rest) `(declr-anon-array))
- ;; direct-abstract-declarator => "[" "static" type-qualifier-list assign...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(declr-anon-array
- ,(tl->list (tl-insert $3 '(stor-spec "static")))
- ,$4))
- ;; direct-abstract-declarator => "[" "static" type-qualifier-list "]"
- (lambda ($4 $3 $2 $1 . $rest)
- `(declr-anon-array
- ,(tl->list (tl-insert $3 '(stor-spec "static")))))
- ;; direct-abstract-declarator => "[" type-qualifier-list "static" assign...
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(declr-anon-array
- ,(tl->list (tl-insert $2 '(stor-spec "static")))
- ,$4))
- ;; direct-abstract-declarator => direct-abstract-declarator "[" "*" "]"
- (lambda ($4 $3 $2 $1 . $rest) `(declr-star ,$1))
- ;; direct-abstract-declarator => "[" "*" "]"
- (lambda ($3 $2 $1 . $rest) '(declr-star))
- ;; direct-abstract-declarator => direct-abstract-declarator "(" paramete...
- (lambda ($4 $3 $2 $1 . $rest)
- `(abs-ftn-declr ,$1 ,$3))
- ;; direct-abstract-declarator => direct-abstract-declarator "(" ")"
- (lambda ($3 $2 $1 . $rest) `(abs-ftn-declr ,$1))
- ;; direct-abstract-declarator => "(" parameter-type-list ")"
- (lambda ($3 $2 $1 . $rest) `(anon-ftn-declr ,$2))
- ;; direct-abstract-declarator => "(" ")"
- (lambda ($2 $1 . $rest) '(anon-ftn-declr))
- ;; typedef-name => 'typename
- (lambda ($1 . $rest) `(typename ,$1))
- ;; initializer => assignment-expression
- (lambda ($1 . $rest) `(initzer ,$1))
- ;; initializer => "{" initializer-list "}"
- (lambda ($3 $2 $1 . $rest)
- `(initzer ,(tl->list $2)))
- ;; initializer => "{" initializer-list "," "}"
- (lambda ($4 $3 $2 $1 . $rest)
- `(initzer ,(tl->list $2)))
- ;; initializer-list => designation initializer
- (lambda ($2 $1 . $rest)
- (make-tl 'initzer-list $1 $2))
- ;; initializer-list => initializer
- (lambda ($1 . $rest) (make-tl 'initzer-list $1))
- ;; initializer-list => initializer-list "," designation initializer
- (lambda ($4 $3 $2 $1 . $rest)
- (tl-append $1 $3 $4))
- ;; initializer-list => initializer-list "," initializer
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; designation => designator-list "="
- (lambda ($2 $1 . $rest) `(desig ,$1))
- ;; designator-list => designator
- (lambda ($1 . $rest) (make-tl 'desgr-list $1))
- ;; designator-list => designator-list designator
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; designator => "[" constant-expression "]"
- (lambda ($3 $2 $1 . $rest) `(array-dsgr ,$2))
- ;; designator => "." identifier
- (lambda ($2 $1 . $rest) `(sel-dsgr ,$2))
- ;; statement => labeled-statement
- (lambda ($1 . $rest) $1)
- ;; statement => compound-statement
- (lambda ($1 . $rest) $1)
- ;; statement => expression-statement
- (lambda ($1 . $rest) $1)
- ;; statement => selection-statement
- (lambda ($1 . $rest) $1)
- ;; statement => iteration-statement
- (lambda ($1 . $rest) $1)
- ;; statement => jump-statement
- (lambda ($1 . $rest) $1)
- ;; statement => asm-statement
- (lambda ($1 . $rest) $1)
- ;; statement => pragma
- (lambda ($1 . $rest) $1)
- ;; statement => cpp-statement
- (lambda ($1 . $rest) $1)
- ;; labeled-statement => identifier ":" statement
- (lambda ($3 $2 $1 . $rest)
- `(labeled-stmt ,$1 ,$3))
- ;; labeled-statement => identifier ":" attribute-specifier statement
- (lambda ($4 $3 $2 $1 . $rest)
- `(labeled-stmt ,$1 ,$4))
- ;; labeled-statement => "case" constant-expression ":" statement
- (lambda ($4 $3 $2 $1 . $rest) `(case ,$2 ,$4))
- ;; labeled-statement => "default" ":" statement
- (lambda ($3 $2 $1 . $rest) `(default ,$3))
- ;; compound-statement => "{" $P3 block-item-list $P4 "}"
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(compd-stmt ,(tl->list $3)))
- ;; compound-statement => "{" "}"
- (lambda ($2 $1 . $rest)
- `(compd-stmt (block-item-list)))
- ;; $P3 =>
- (lambda ($1 . $rest) (cpi-push))
- ;; $P4 =>
- (lambda ($3 $2 $1 . $rest) (cpi-pop))
- ;; block-item-list => block-item
- (lambda ($1 . $rest)
- (make-tl 'block-item-list $1))
- ;; block-item-list => block-item-list block-item
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; block-item => declaration
- (lambda ($1 . $rest) $1)
- ;; block-item => statement
- (lambda ($1 . $rest) $1)
- ;; expression-statement => expression ";"
- (lambda ($2 $1 . $rest) `(expr-stmt ,$1))
- ;; expression-statement => ";"
- (lambda ($1 . $rest) '(expr-stmt))
- ;; selection-statement => "if" "(" expression ")" statement
- (lambda ($5 $4 $3 $2 $1 . $rest) `(if ,$3 ,$5))
- ;; selection-statement => "if" "(" expression ")" statement "else" state...
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(if ,$3 ,$5 ,$7))
- ;; selection-statement => "switch" "(" expression ")" statement
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(switch ,$3 ,$5))
- ;; iteration-statement => "while" "(" expression ")" statement
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(while ,$3 ,$5))
- ;; iteration-statement => "do" statement "while" "(" expression ")" ";"
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(do-while ,$2 ,$5))
- ;; iteration-statement => "for" "(" initial-clause opt-expression ";" op...
- (lambda ($8 $7 $6 $5 $4 $3 $2 $1 . $rest)
- `(for ,$3 ,$4 ,$6 ,$8))
- ;; initial-clause => expression ";"
- (lambda ($2 $1 . $rest) $1)
- ;; initial-clause => ";"
- (lambda ($1 . $rest) '(expr))
- ;; initial-clause => declaration
- (lambda ($1 . $rest) $1)
- ;; opt-expression =>
- (lambda $rest '(expr))
- ;; opt-expression => expression
- (lambda ($1 . $rest) $1)
- ;; jump-statement => "goto" identifier ";"
- (lambda ($3 $2 $1 . $rest) `(goto ,$2))
- ;; jump-statement => "continue" ";"
- (lambda ($2 $1 . $rest) '(continue))
- ;; jump-statement => "break" ";"
- (lambda ($2 $1 . $rest) '(break))
- ;; jump-statement => "return" expression ";"
- (lambda ($3 $2 $1 . $rest) `(return ,$2))
- ;; jump-statement => "return" ";"
- (lambda ($2 $1 . $rest) `(return (expr)))
- ;; asm-statement => asm-expression ";"
- (lambda ($2 $1 . $rest) $1)
- ;; asm-expression => "__asm__" opt-asm-specifiers "(" string-literal ")"
- (lambda ($5 $4 $3 $2 $1 . $rest)
- `(asm-expr (@ (extension "GNUC")) ,$4))
- ;; asm-expression => "__asm__" opt-asm-specifiers "(" string-literal asm...
- (lambda ($6 $5 $4 $3 $2 $1 . $rest)
- `(asm-expr
- (@ (extension "GNUC"))
- ,$4
- ,(tl->list $5)))
- ;; asm-expression => "__asm__" opt-asm-specifiers "(" string-literal asm...
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(asm-expr
- (@ (extension "GNUC"))
- ,$4
- ,(tl->list $5)
- ,(tl->list $6)))
- ;; asm-expression => "__asm__" opt-asm-specifiers "(" string-literal asm...
- (lambda ($8 $7 $6 $5 $4 $3 $2 $1 . $rest)
- `(asm-expr
- (@ (extension "GNUC"))
- ,$4
- ,(tl->list $5)
- ,(tl->list $6)
- ,(tl->list $7)))
- ;; opt-asm-specifiers =>
- (lambda $rest (list))
- ;; opt-asm-specifiers => "volatile"
- (lambda ($1 . $rest) $1)
- ;; asm-outputs => ":"
- (lambda ($1 . $rest) (make-tl 'asm-outputs))
- ;; asm-outputs => ":" asm-output
- (lambda ($2 $1 . $rest)
- (make-tl 'asm-outputs $2))
- ;; asm-outputs => asm-outputs "," asm-output
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; asm-output => string-literal "(" identifier ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(asm-operand ,$1 ,$3))
- ;; asm-output => "[" identifier "]" string-literal "(" identifier ")"
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(asm-operand ,$2 ,$4 ,$6))
- ;; asm-inputs => ":"
- (lambda ($1 . $rest) (make-tl 'asm-inputs))
- ;; asm-inputs => ":" asm-input
- (lambda ($2 $1 . $rest) (make-tl 'asm-inputs $2))
- ;; asm-inputs => asm-inputs "," asm-input
- (lambda ($3 $2 $1 . $rest) (tl-append $1 $3))
- ;; asm-input => string-literal "(" expression ")"
- (lambda ($4 $3 $2 $1 . $rest)
- `(asm-operand ,$1 ,$3))
- ;; asm-input => "[" identifier "]" string-literal "(" expression ")"
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(asm-operand ,$2 ,$4 ,$6))
- ;; asm-clobbers => ":"
- (lambda ($1 . $rest) (make-tl 'asm-clobbers))
- ;; asm-clobbers => ":" string-literal
- (lambda ($2 $1 . $rest)
- (tl-extend (make-tl 'asm-clobbers) $2))
- ;; asm-clobbers => asm-clobbers "," string-literal
- (lambda ($3 $2 $1 . $rest)
- (tl-extend $1 (cdr $3)))
- ;; translation-unit => external-declaration-list
- (lambda ($1 . $rest) (tl->list $1))
- ;; external-declaration-list =>
- (lambda $rest (make-tl 'trans-unit))
- ;; external-declaration-list => external-declaration-list external-decla...
- (lambda ($2 $1 . $rest)
- (if (eqv? (sx-tag $2) 'extern-block)
- (tl-extend $1 (sx-tail $2 1))
- (tl-append $1 $2)))
- ;; external-declaration => function-definition
- (lambda ($1 . $rest) $1)
- ;; external-declaration => declaration
- (lambda ($1 . $rest) $1)
- ;; external-declaration => lone-comment
- (lambda ($1 . $rest) $1)
- ;; external-declaration => cpp-statement
- (lambda ($1 . $rest) $1)
- ;; external-declaration => pragma
- (lambda ($1 . $rest) $1)
- ;; external-declaration => "extern" '$string "{" $P5 external-declaratio...
- (lambda ($7 $6 $5 $4 $3 $2 $1 . $rest)
- `(extern-block
- (extern-begin ,$2)
- ,@(sx-tail (tl->list $5) 1)
- (extern-end)))
- ;; external-declaration => ";"
- (lambda ($1 . $rest)
- `(decl (@ (extension "GNUC"))))
- ;; $P5 =>
- (lambda ($3 $2 $1 . $rest) (cpi-dec-blev!))
- ;; $P6 =>
- (lambda ($5 $4 $3 $2 $1 . $rest) (cpi-inc-blev!))
- ;; function-definition => declaration-specifiers declarator compound-sta...
- (lambda ($3 $2 $1 . $rest)
- `(fctn-defn ,$1 ,$2 ,$3))
- ;; identifier => '$ident
- (lambda ($1 . $rest) `(ident ,$1))
- ;; constant => '$fixed
- (lambda ($1 . $rest) `(fixed ,$1))
- ;; constant => '$float
- (lambda ($1 . $rest) `(float ,$1))
- ;; constant => '$chlit
- (lambda ($1 . $rest) `(char ,$1))
- ;; constant => '$chlit/L
- (lambda ($1 . $rest)
- `(char (@ (type "wchar_t")) ,$1))
- ;; constant => '$chlit/u
- (lambda ($1 . $rest)
- `(char (@ (type "char16_t")) ,$1))
- ;; constant => '$chlit/U
- (lambda ($1 . $rest)
- `(char (@ (type "char32_t")) ,$1))
- ;; string-literal => string-literal-1
- (lambda ($1 . $rest) (tl->list $1))
- ;; string-literal-1 => '$string
- (lambda ($1 . $rest) (make-tl 'string $1))
- ;; string-literal-1 => string-literal-1 '$string
- (lambda ($2 $1 . $rest) (tl-append $1 $2))
- ;; code-comment => '$code-comm
- (lambda ($1 . $rest) `(comment ,$1))
- ;; lone-comment => '$lone-comm
- (lambda ($1 . $rest) `(comment ,$1))
- ;; cpp-statement => 'cpp-stmt
- (lambda ($1 . $rest) `(cpp-stmt ,$1))
- ;; pragma => '$pragma
- (lambda ($1 . $rest) `(pragma ,$1))
- ;; pragma => "_Pragma" "(" string-literal ")"
- (lambda ($4 $3 $2 $1 . $rest) `(pragma ,$3))
- ))
- ;;; end tables
|