3
(output: c-grammar "c-wrapper/c-grammar.yy.scm")
4
; (out-table: "c-gram.out")
8
;; COMMA=, LCBRA={ RCBRA=} LSBRA=[ RSBRA=]
9
;; LPAREN=( RPAREN=) OR=| DOT=.
10
COMMA LCBRA RCBRA LSBRA RSBRA
11
LPAREN RPAREN OR DOT COLON
13
~ ! + - * / ^ & % = ? < >
15
IDENTIFIER CONSTANT STRING SIZEOF
16
PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP
17
AND_OP OR_OP MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN
18
SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
19
XOR_ASSIGN OR_ASSIGN TYPENAME
21
TYPEDEF EXTERN STATIC AUTO REGISTER INLINE RESTRICT
22
SIGNED UNSIGNED CONST VOLATILE
23
STRUCT UNION ENUM ELLIPSIS RANGE
25
CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
29
AT_INTERFACE AT_IMPLEMENTATION AT_END AT_SELECTOR AT_DEFS AT_ENCODE
30
AT_PUBLIC AT_PRIVATE AT_PROTECTED AT_PROTOCOL
31
AT_CLASS AT_ALIAS AT_THROW AT_TRY AT_CATCH AT_FINALLY AT_SYNCHRONIZED
40
(START_MACRO statement_list) : (%MACRO-BODY $2)
44
(external_definition) : (clear-arg-pool)
45
(file external_definition) : (clear-arg-pool)
49
(maybe_extension function_definition)
50
(maybe_extension asm_definition)
51
(maybe_extension external_declaration)
56
(declarator function_body) : (emit-define-inline 'int $1 $2)
57
(declaration_specifiers declarator function_body)
58
: (emit-define-inline $1 $2 $3)
62
(compound_statement) : (%FUNCTION-BODY $1)
63
(declaration_list compound_statement) : #f ;; TODO: support K&R style
67
(declaration_specifiers SEMICOLON) : (do-external-declaration $1 #f)
68
(declaration_specifiers init_declarator_list SEMICOLON)
69
: (do-external-declaration $1 $2)
73
(declaration_specifiers SEMICOLON) : (declaration $1 '())
74
(declaration_specifiers init_declarator_list SEMICOLON) : (declaration $1 $2)
75
(extension declaration) : $2
78
(declaration_specifiers
79
(storage_class_specifier)
80
(storage_class_specifier declaration_specifiers) : (%APPEND $1 $2)
82
(type_specifier declaration_specifiers) : (%APPEND $1 $2)
86
(init_declarator) : (%LIST $1)
87
(init_declarator_list COMMA init_declarator) : (%ADD-LIST $1 $3)
91
(declarator maybe_asm = initializer) : (%ADD-LIST $1 (decl-init-value $4))
92
(declarator maybe_asm) : $1
95
(storage_class_specifier
96
(TYPEDEF) : '(TYPEDEF)
104
(TYPENAME) : (%LIST $1)
106
(UNSIGNED) : '(UNSIGNED)
110
(struct_or_union_specifier) : (%LIST $1)
111
(enum_specifier) : (%LIST $1)
113
(TYPENAME objc_non_empty_protocol_references) : (%LIST $1)
114
(objc_non_empty_protocol_references) : '(id)
118
(identifier) : (%IDENTIFIER $1)
119
(CONSTANT) : (cadr $1)
121
(OBJC_STRING) : (%OBJC-STRING $1)
122
(LPAREN expr RPAREN) : (%EXPR-IN-PARENS $2)
123
(LPAREN compound_statement RPAREN) : (%COMPOUND-STATEMENT $2)
124
(LPAREN type_name RPAREN LCBRA initializer_list RCBRA) : #f
125
(objc_message_expr) : $1
126
(objc_selector_expr) : $1
127
(objc_protocol_expr) : #f
128
(objc_encode_expr) : #f
133
(postfix_expr LSBRA expr RSBRA) : (%REF-ARRAY $1 $3)
134
(postfix_expr LPAREN RPAREN) : (%FUNCALL $1 '())
135
(postfix_expr LPAREN argument_expr_list RPAREN) : (%FUNCALL $1 $3)
136
(postfix_expr DOT identifier) : (%DOT-REF $1 $3)
137
(postfix_expr PTR_OP identifier) : (%PTR-REF $1 $3)
138
(postfix_expr INC_OP) : (%POST-INC $1)
139
(postfix_expr DEC_OP) : (%POST-DEC $1)
143
(assignment_expr) : (%LIST $1)
144
(argument_expr_list COMMA assignment_expr) : (%ADD-LIST $1 $3)
149
(INC_OP unary_expr) : (%PRE-INC $2)
150
(DEC_OP unary_expr) : (%PRE-DEC $2)
151
(unary_operator cast_expr) : (%UNARY $1 $2)
152
(SIZEOF unary_expr) : (%SIZEOF-EXPR $2)
153
(SIZEOF LPAREN type_name RPAREN) : (%SIZEOF-TYPE $3)
154
(extension cast_expr) : $2
168
(LPAREN type_name RPAREN cast_expr) : (%CAST $2 $4)
173
(multiplicative_expr * cast_expr) : (%MUL $1 $3)
174
(multiplicative_expr / cast_expr) : (%DIV $1 $3)
175
(multiplicative_expr % cast_expr) : (%MOD $1 $3)
179
(multiplicative_expr) : $1
180
(additive_expr + multiplicative_expr) : (%ADD $1 $3)
181
(additive_expr - multiplicative_expr) : (%SUB $1 $3)
186
(shift_expr LEFT_OP additive_expr) : (%SHIFT-LEFT $1 $3)
187
(shift_expr RIGHT_OP additive_expr) : (%SHIFT-RIGHT $1 $3)
192
(relational_expr < shift_expr) : (%LT $1 $3)
193
(relational_expr > shift_expr) : (%GT $1 $3)
194
(relational_expr LE_OP shift_expr) : (%LE $1 $3)
195
(relational_expr GE_OP shift_expr) : (%GE $1 $3)
199
(relational_expr) : $1
200
(equality_expr EQ_OP relational_expr) : (%EQ $1 $3)
201
(equality_expr NE_OP relational_expr) : (%NE $1 $3)
206
(and_expr & equality_expr) : (%BIT-AND $1 $3)
212
(exclusive_or_expr ^ and_expr) : (%BIT-XOR $1 $3)
217
(exclusive_or_expr) : $1
218
(inclusive_or_expr OR exclusive_or_expr) : (%BIT-OR $1 $3)
223
(inclusive_or_expr) : $1
224
(logical_and_expr AND_OP inclusive_or_expr) : (%LOG-AND $1 $3)
228
(logical_and_expr) : $1
229
(logical_or_expr OR_OP logical_and_expr) : (%LOG-OR $1 $3)
233
(logical_or_expr) : $1
234
(logical_or_expr ? logical_or_expr COLON conditional_expr) : (%IF $1 $3 $5)
238
(conditional_expr) : $1
239
(unary_expr = assignment_expr) : (%ASSIGN $1 $3)
240
(unary_expr MUL_ASSIGN assignment_expr) : (%ASSIGN $1 (%MUL $1 $3))
241
(unary_expr DIV_ASSIGN assignment_expr) : (%ASSIGN $1 (%DIV $1 $3))
242
(unary_expr MOD_ASSIGN assignment_expr) : (%ASSIGN $1 (%MOD $1 $3))
243
(unary_expr ADD_ASSIGN assignment_expr) : (%ASSIGN $1 (%ADD $1 $3))
244
(unary_expr SUB_ASSIGN assignment_expr) : (%ASSIGN $1 (%SUB $1 $3))
245
(unary_expr LEFT_ASSIGN assignment_expr) : (%ASSIGN $1 (%SHIFT-LEFT $1 $3))
246
(unary_expr RIGHT_ASSIGN assignment_expr) : (%ASSIGN $1 (%SHIFT-RIGHT $1 $3))
247
(unary_expr AND_ASSIGN assignment_expr) : (%ASSIGN $1 (%BIT-AND $1 $3))
248
(unary_expr XOR_ASSIGN assignment_expr) : (%ASSIGN $1 (%BIT-XOR $1 $3))
249
(unary_expr OR_ASSIGN assignment_expr) : (%ASSIGN $1 (%BIT-OR $1 $3))
253
(assignment_expr) : $1
254
(expr COMMA assignment_expr) : (%CONCAT-EXPR $1 $3)
258
(conditional_expr) : $1
261
(struct_or_union_specifier
262
(struct_or_union identifier LCBRA struct_declaration_list RCBRA)
263
: (decl-struct-or-union $1 $2 $4)
264
(struct_or_union LCBRA struct_declaration_list RCBRA)
265
: (decl-struct-or-union $1 #f $3)
266
(struct_or_union identifier)
267
: (decl-struct-or-union $1 $2 #f)
275
(struct_declaration_list
276
(struct_declaration) : $1
277
(struct_declaration_list struct_declaration) : (%APPEND $1 $2)
281
(type_specifier_list struct_declarator_list SEMICOLON) : (make-var-list $1 $2)
282
(extension type_specifier_list struct_declarator_list SEMICOLON)
283
: (make-var-list $2 $3)
284
(struct_or_union_specifier SEMICOLON)
285
: (make-var-list (%LIST $1) (%LIST (decl-identifier (gensym "%unnamed"))))
286
(extension struct_or_union_specifier SEMICOLON)
287
: (make-var-list (%LIST $2) (%LIST (decl-identifier (gensym "%unnamed"))))
288
(AT_DEFS LPAREN TYPENAME RPAREN) : '()
291
(struct_declarator_list
292
(struct_declarator) : (%LIST $1)
293
(struct_declarator_list COMMA struct_declarator) : (%ADD-LIST $1 $3)
298
(COLON constant_expr) : (decl-bitfield #f $2)
299
(declarator COLON constant_expr) : (decl-bitfield $1 $3)
303
(ENUM LCBRA enumerator_list RCBRA) : (decl-enum #f $3)
304
(ENUM LCBRA enumerator_list COMMA RCBRA) : (decl-enum #f $3)
305
(ENUM identifier LCBRA enumerator_list RCBRA) : (decl-enum $2 $4)
306
(ENUM identifier LCBRA enumerator_list COMMA RCBRA) : (decl-enum $2 $4)
307
(ENUM identifier) : (decl-enum $2 '())
311
(enumerator) : (%LIST $1)
312
(enumerator_list COMMA enumerator) : (%ADD-LIST $1 $3)
316
(identifier) : (decl-enumerator $1 #f)
317
(identifier = constant_expr) : (decl-enumerator $1 $3)
322
(pointer declarator2) : (%APPEND $2 $1)
326
(identifier) : (decl-identifier $1)
327
(LPAREN declarator RPAREN) : $2
328
(declarator2 LSBRA RSBRA) : (%APPEND $1 (decl-array #f))
329
(declarator2 LSBRA array_qualifier_list RSBRA) : (%APPEND $1 (decl-array #f))
330
(declarator2 LSBRA array_size_expr RSBRA) : (%APPEND $1 (decl-array $3))
331
(declarator2 LSBRA array_qualifier_list array_size_expr RSBRA)
332
: (%APPEND $1 (decl-array $4))
333
(declarator2 LPAREN RPAREN) : (%APPEND $1 (decl-func '()))
334
(declarator2 LPAREN parameter_type_list RPAREN) : (%APPEND $1 $3)
335
(declarator2 LPAREN parameter_identifier_list RPAREN) : $1 ;; not supported
340
(* type_specifier_list) : (decl-ptr)
341
(* pointer) : (%APPEND (decl-ptr) $2)
342
(* type_specifier_list pointer) : (%APPEND (decl-ptr) $3)
346
(type_specifier) : $1
347
(type_specifier_list type_specifier) : (%APPEND $1 $2)
350
(parameter_identifier_list
352
(identifier_list COMMA ELLIPSIS)
356
(identifier) : (list $1)
357
(identifier_list COMMA identifier) : (%ADD-LIST $1 $3)
361
(parameter_list) : (decl-func $1)
362
(parameter_list COMMA ELLIPSIS) : (decl-func-vaargs $1)
366
(parameter_declaration) : (%LIST $1)
367
(parameter_list COMMA parameter_declaration) : (%ADD-LIST $1 $3)
370
(parameter_declaration
371
(type_specifier_list declarator) : (parameter-decl $1 $2)
376
(type_specifier_list) : (make-var $1 '())
377
(type_specifier_list abstract_declarator) : (make-var $1 $2)
382
(abstract_declarator2) : $1
383
(pointer abstract_declarator2) : (%APPEND $2 $1)
387
(abstract_declarator2
388
(LPAREN abstract_declarator RPAREN) : $2
389
(LSBRA RSBRA) : (decl-ptr)
390
(LSBRA array_qualifier_list RSBRA) : (decl-ptr)
391
(LSBRA array_size_expr RSBRA) : (decl-array $2)
392
(LSBRA array_qualifier_list array_size_expr RSBRA) : (decl-array $3)
393
(abstract_declarator2 LSBRA RSBRA) : (%APPEND $1 (decl-ptr))
394
(abstract_declarator2 LSBRA array_qualifier_list RSBRA) : (%APPEND $1 (decl-ptr))
395
(abstract_declarator2 LSBRA array_size_expr RSBRA) : (%APPEND $1 (decl-array $3))
396
(abstract_declarator2 LSBRA array_qualifier_list array_size_expr RSBRA)
397
: (%APPEND $1 (decl-array $4))
398
(LPAREN RPAREN) : (decl-func '())
399
(LPAREN parameter_type_list RPAREN) : $2
400
(abstract_declarator2 LPAREN RPAREN) : (%APPEND $1 (decl-func '()))
401
(abstract_declarator2 LPAREN parameter_type_list RPAREN) : (%APPEND $1 $3)
405
(assignment_expr) : $1
406
(LCBRA initializer_list RCBRA) : #f
407
(LCBRA initializer_list COMMA RCBRA) : #f
412
(initializer_list COMMA initializer)
416
(labeled_statement) : #f
417
(compound_statement) : $1
418
(expression_statement) : $1
419
(selection_statement) : $1
420
(iteration_statement) : $1
421
(jump_statement) : $1
423
(objc_statement) : #f
427
(AT_THROW expr SEMICOLON)
429
(objc_try_catch_statement)
430
(AT_SYNCHRONIZED LPAREN expr RPAREN compound_statement)
434
(AT_CATCH LPAREN identifier RPAREN)
438
(objc_catch_prefix compound_statement)
443
(objc_opt_catch_list objc_catch_clause)
446
(objc_try_catch_clause
447
(AT_TRY compound_statement objc_opt_catch_list)
451
(AT_FINALLY compound_statement)
454
(objc_try_catch_statement
455
(objc_try_catch_clause)
456
(objc_try_catch_clause objc_finally_clause)
460
(identifier COLON statement)
461
(CASE constant_expr COLON statement)
462
(DEFAULT COLON statement)
466
(LCBRA RCBRA) : (%COMPOUND-STATEMENT '(0))
467
(LCBRA statement_list RCBRA) : (%COMPOUND-STATEMENT $2)
468
(LCBRA declaration_list RCBRA) : (%COMPOUND-STATEMENT '(0))
469
(LCBRA declaration_list statement_list RCBRA)
470
: (%COMPOUND-STATEMENT-WITH-DECL $2 $3)
475
(declaration) : (%LIST $1)
476
(declaration_list declaration) : (%ADD-LIST $1 $2)
480
(statement) : (%LIST $1)
481
(statement_list statement) : (%ADD-LIST $1 $2)
484
(expression_statement
486
(expr SEMICOLON) : $1
487
(error SEMICOLON) : #f
491
(IF LPAREN expr RPAREN statement) : (%IF $3 $5 0)
492
(IF LPAREN expr RPAREN statement ELSE statement) : (%IF $3 $5 $7)
493
(SWITCH LPAREN expr RPAREN statement) : #f
497
(WHILE LPAREN expr RPAREN statement) : (%WHILE $3 $5)
498
(DO statement WHILE LPAREN expr RPAREN SEMICOLON) : (%DO-WHILE $5 $2)
499
(FOR LPAREN SEMICOLON SEMICOLON RPAREN statement) : (%FOR 0 1 0 $6)
500
(FOR LPAREN SEMICOLON SEMICOLON expr RPAREN statement) : (%FOR 0 1 $5 $7)
501
(FOR LPAREN SEMICOLON expr SEMICOLON RPAREN statement) : (%FOR 0 $4 0 $7)
502
(FOR LPAREN SEMICOLON expr SEMICOLON expr RPAREN statement) : (%FOR 0 $4 $6 $8)
503
(FOR LPAREN expr SEMICOLON SEMICOLON RPAREN statement) : (%FOR $3 1 0 $7)
504
(FOR LPAREN expr SEMICOLON SEMICOLON expr RPAREN statement) : (%FOR $3 1 $6 $8)
505
(FOR LPAREN expr SEMICOLON expr SEMICOLON RPAREN statement) : (%FOR $3 $5 0 $8)
506
(FOR LPAREN expr SEMICOLON expr SEMICOLON expr RPAREN statement)
511
(GOTO identifier SEMICOLON) : #f
512
(CONTINUE SEMICOLON) : (%CONTINUE)
513
(BREAK SEMICOLON) : (%BREAK)
514
(RETURN SEMICOLON) : (%RETURN 0)
515
(RETURN expr SEMICOLON) : (%RETURN $2)
531
(ASM LPAREN string_list RPAREN)
535
(ASM LPAREN asm_argument RPAREN SEMICOLON)
536
(ASM type_qualifier LPAREN asm_argument RPAREN SEMICOLON)
552
(array_qualifier_list
554
(array_qualifier_list array_qualifier)
558
(assignment_expr) : $1
564
(string_list COLON asm_operands)
565
(string_list COLON asm_operands COLON asm_operands)
566
(string_list COLON asm_operands COLON asm_operands COLON asm_clobbers)
581
(asm_operands2 COMMA asm_operand)
585
(STRING LPAREN expr RPAREN)
586
(LSBRA identifier RSBRA STRING LPAREN expr RPAREN)
591
(asm_clobbers COMMA STRING)
612
(objc_class_definition)
613
(objc_class_declaration)
614
(objc_alias_declaration)
615
(objc_protocol_definition)
616
(objc_method_definition)
625
(classname) : (%LIST $1)
626
(classname_list COMMA classname) : (%ADD-LIST $1 $3)
629
(objc_class_declaration
630
(AT_CLASS classname_list SEMICOLON) : (emit-define-objc-class $2)
633
(objc_alias_declaration
634
(AT_ALIAS identifier identifier SEMICOLON) : #f
643
(LCBRA objc_ivar_declaration_list RCBRA)
647
(objc_class_definition
648
(objc_interface_head objc_superclass objc_protocol_references
650
objc_method_prototype_list
652
(AT_IMPLEMENTATION classname objc_superclass
654
(objc_interface_head LPAREN classname RPAREN objc_protocol_references
655
objc_method_prototype_list
657
(AT_IMPLEMENTATION classname LPAREN identifier RPAREN)
661
(AT_INTERFACE classname) : (emit-define-objc-class (%LIST $2))
664
(objc_protocol_definition
665
(AT_PROTOCOL identifier objc_protocol_references objc_method_prototype_list AT_END)
666
(AT_PROTOCOL identifier_list SEMICOLON)
669
(objc_protocol_references
671
(objc_non_empty_protocol_references)
674
(objc_non_empty_protocol_references
678
(objc_ivar_declaration_list
679
(objc_ivar_declaration_list objc_visibility_spec objc_ivar_declarations)
680
(objc_ivar_declarations)
683
(objc_visibility_spec
689
(objc_ivar_declarations
691
(objc_ivar_declarations objc_ivar_declaration SEMICOLON)
692
(objc_ivar_declarations SEMICOLON)
695
(objc_ivar_declaration
696
(declaration_specifiers objc_ivars)
701
(objc_ivar_declarator)
702
(objc_ivars COMMA objc_ivar_declarator)
705
(objc_ivar_declarator
707
(declarator COLON assignment_expr)
708
(COLON assignment_expr)
716
(objc_method_definition
717
(objc_method_type objc_method_declaration optarglist compound_statement)
720
(objc_method_prototype_list
722
(objc_method_prototype_list objc_method_prototype)
723
(objc_method_prototype_list external_declaration)
726
(objc_method_prototype
727
(objc_method_type objc_method_declaration SEMICOLON)
728
: (apply emit-objc-method $2)
731
(objc_protocol_qualifier
736
(objc_method_declaration
737
(LPAREN objc_protocol_qualifier type_name RPAREN unary_selector)
738
: (decl-objc-method $3 $5)
739
(unary_selector) : (decl-objc-method (var-id) $1)
740
(LPAREN objc_protocol_qualifier type_name RPAREN keyword_selector optparmlist)
741
: (decl-objc-method $3 $5)
742
(keyword_selector optparmlist) : (decl-objc-method (var-id) $1)
763
(mydecl error_statement)
767
(declaration_specifiers parameter_list SEMICOLON)
768
(declaration_specifiers SEMICOLON)
774
(COMMA parameter_list)
778
(selector) : (decl-keyword $1)
782
(keyword_declarator) : (combine-decl-keyword $1)
783
(keyword_selector keyword_declarator) : (combine-decl-keyword $1 $2)
789
(reserved_words) : $1
813
(selector COLON LPAREN objc_protocol_qualifier type_name RPAREN identifier)
814
: (decl-keyword $1 $5)
815
(selector COLON identifier) : (decl-keyword $1 (var-id))
816
(COLON LPAREN objc_protocol_qualifier type_name RPAREN identifier)
817
: (decl-keyword "" $4)
818
(COLON identifier) : (decl-keyword "" (var-id))
822
(selector) : (%QUOTE $1)
823
(keyword_arg_list) : $1
828
(keyword_arg_list keyword_arg) : (%APPEND $1 $2)
832
(selector COLON expr) : (%KEYWORD-ARG $1 $3)
833
(COLON expr) : (%KEYWORD-ARG-WITHOUT-SELECTOR $2)
842
(LSBRA receiver message_args RSBRA) : (%OBJC-MESSAGE-EXPR $2 $3)
846
(selector) : (x->string $1)
847
(keyword_name_list) : (string-join (map x->string $1) ":")
851
(keyword_name) : (%LIST $1)
852
(keyword_name_list keyword_name) : (%ADD-LIST $1 $2)
856
(selector COLON) : $1
861
(AT_SELECTOR LPAREN selector_arg RPAREN) : (%SELECTOR $3)
865
(AT_PROTOCOL LPAREN identifier RPAREN)
869
(AT_ENCODE LPAREN TYPENAME RPAREN)
883
;; (attributes attribute)
887
;; (ATTRIBUTE LPAREN LPAREN attribute_list RPAREN RPAREN)
892
;; (attribute_list COMMA attribute2)
898
;; (attribute_word LPAREN IDENTIFIER RPAREN)
899
;; (attribute_word LPAREN IDENTIFIER COMMA expr RPAREN)
900
;; (attribute_word LPAREN RPAREN)
901
;; (attribute_word LPAREN expr RPAREN)
906
;; (storage_class_specifier)