parser/c_compiler/parser.y
changeset 39 46d7ec9d63bd
parent 37 0fbbe329c3a2
--- a/parser/c_compiler/parser.y
+++ b/parser/c_compiler/parser.y
@@ -1,5 +1,5 @@
 %{
-	#include "prototypes.h"
+  #include "prototypes.h"
 %}
 %token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF
 %token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP
@@ -17,409 +17,409 @@
 %%
 
 primary_expr
-	: identifier
-	| CONSTANT
-	| STRING_LITERAL
-	| '(' expr ')'
-	;
+  : identifier
+  | CONSTANT
+  | STRING_LITERAL
+  | '(' expr ')'
+  ;
 
 postfix_expr
-	: primary_expr
-	| postfix_expr '[' expr ']'
-	| postfix_expr '(' ')'
-	| postfix_expr '(' argument_expr_list ')'
-	| postfix_expr '.' identifier
-	| postfix_expr PTR_OP identifier
-	| postfix_expr INC_OP
-	| postfix_expr DEC_OP
-	;
+  : primary_expr
+  | postfix_expr '[' expr ']'
+  | postfix_expr '(' ')'
+  | postfix_expr '(' argument_expr_list ')'
+  | postfix_expr '.' identifier
+  | postfix_expr PTR_OP identifier
+  | postfix_expr INC_OP
+  | postfix_expr DEC_OP
+  ;
 
 argument_expr_list
-	: assignment_expr
-	| argument_expr_list ',' assignment_expr
-	;
+  : assignment_expr
+  | argument_expr_list ',' assignment_expr
+  ;
 
 unary_expr
-	: postfix_expr
-	| INC_OP unary_expr
-	| DEC_OP unary_expr
-	| unary_operator cast_expr
-	| SIZEOF unary_expr
-	| SIZEOF '(' type_name ')'
-	;
+  : postfix_expr
+  | INC_OP unary_expr
+  | DEC_OP unary_expr
+  | unary_operator cast_expr
+  | SIZEOF unary_expr
+  | SIZEOF '(' type_name ')'
+  ;
 
 unary_operator
-	: '&'
-	| '*'
-	| '+'
-	| '-'
-	| '~'
-	| '!'
-	;
+  : '&'
+  | '*'
+  | '+'
+  | '-'
+  | '~'
+  | '!'
+  ;
 
 cast_expr
-	: unary_expr
-	| '(' type_name ')' cast_expr
-	;
+  : unary_expr
+  | '(' type_name ')' cast_expr
+  ;
 
 multiplicative_expr
-	: cast_expr
-	| multiplicative_expr '*' cast_expr
-	| multiplicative_expr '/' cast_expr
-	| multiplicative_expr '%' cast_expr
-	;
+  : cast_expr
+  | multiplicative_expr '*' cast_expr
+  | multiplicative_expr '/' cast_expr
+  | multiplicative_expr '%' cast_expr
+  ;
 
 additive_expr
-	: multiplicative_expr
-	| additive_expr '+' multiplicative_expr
-	| additive_expr '-' multiplicative_expr
-	;
+  : multiplicative_expr
+  | additive_expr '+' multiplicative_expr
+  | additive_expr '-' multiplicative_expr
+  ;
 
 shift_expr
-	: additive_expr
-	| shift_expr LEFT_OP additive_expr
-	| shift_expr RIGHT_OP additive_expr
-	;
+  : additive_expr
+  | shift_expr LEFT_OP additive_expr
+  | shift_expr RIGHT_OP additive_expr
+  ;
 
 relational_expr
-	: shift_expr
-	| relational_expr '<' shift_expr
-	| relational_expr '>' shift_expr
-	| relational_expr LE_OP shift_expr
-	| relational_expr GE_OP shift_expr
-	;
+  : shift_expr
+  | relational_expr '<' shift_expr
+  | relational_expr '>' shift_expr
+  | relational_expr LE_OP shift_expr
+  | relational_expr GE_OP shift_expr
+  ;
 
 equality_expr
-	: relational_expr
-	| equality_expr EQ_OP relational_expr
-	| equality_expr NE_OP relational_expr
-	;
+  : relational_expr
+  | equality_expr EQ_OP relational_expr
+  | equality_expr NE_OP relational_expr
+  ;
 
 and_expr
-	: equality_expr
-	| and_expr '&' equality_expr
-	;
+  : equality_expr
+  | and_expr '&' equality_expr
+  ;
 
 exclusive_or_expr
-	: and_expr
-	| exclusive_or_expr '^' and_expr
-	;
+  : and_expr
+  | exclusive_or_expr '^' and_expr
+  ;
 
 inclusive_or_expr
-	: exclusive_or_expr
-	| inclusive_or_expr '|' exclusive_or_expr
-	;
+  : exclusive_or_expr
+  | inclusive_or_expr '|' exclusive_or_expr
+  ;
 
 logical_and_expr
-	: inclusive_or_expr
-	| logical_and_expr AND_OP inclusive_or_expr
-	;
+  : inclusive_or_expr
+  | logical_and_expr AND_OP inclusive_or_expr
+  ;
 
 logical_or_expr
-	: logical_and_expr
-	| logical_or_expr OR_OP logical_and_expr
-	;
+  : logical_and_expr
+  | logical_or_expr OR_OP logical_and_expr
+  ;
 
 conditional_expr
-	: logical_or_expr
-	| logical_or_expr '?' logical_or_expr ':' conditional_expr
-	;
+  : logical_or_expr
+  | logical_or_expr '?' logical_or_expr ':' conditional_expr
+  ;
 
 assignment_expr
-	: conditional_expr
-	| unary_expr assignment_operator assignment_expr
-	;
+  : conditional_expr
+  | unary_expr assignment_operator assignment_expr
+  ;
 
 assignment_operator
-	: '='
-	| MUL_ASSIGN
-	| DIV_ASSIGN
-	| MOD_ASSIGN
-	| ADD_ASSIGN
-	| SUB_ASSIGN
-	| LEFT_ASSIGN
-	| RIGHT_ASSIGN
-	| AND_ASSIGN
-	| XOR_ASSIGN
-	| OR_ASSIGN
-	;
+  : '='
+  | MUL_ASSIGN
+  | DIV_ASSIGN
+  | MOD_ASSIGN
+  | ADD_ASSIGN
+  | SUB_ASSIGN
+  | LEFT_ASSIGN
+  | RIGHT_ASSIGN
+  | AND_ASSIGN
+  | XOR_ASSIGN
+  | OR_ASSIGN
+  ;
 
 expr
-	: assignment_expr
-	| expr ',' assignment_expr
-	;
+  : assignment_expr
+  | expr ',' assignment_expr
+  ;
 
 constant_expr
-	: conditional_expr
-	;
+  : conditional_expr
+  ;
 
 declaration
-	: declaration_specifiers ';'
-	| declaration_specifiers init_declarator_list ';'
-	;
+  : declaration_specifiers ';'
+  | declaration_specifiers init_declarator_list ';'
+  ;
 
 declaration_specifiers
-	: storage_class_specifier
-	| storage_class_specifier declaration_specifiers
-	| type_specifier
-	| type_specifier declaration_specifiers
-	;
+  : storage_class_specifier
+  | storage_class_specifier declaration_specifiers
+  | type_specifier
+  | type_specifier declaration_specifiers
+  ;
 
 init_declarator_list
-	: init_declarator
-	| init_declarator_list ',' init_declarator
-	;
+  : init_declarator
+  | init_declarator_list ',' init_declarator
+  ;
 
 init_declarator
-	: declarator
-	| declarator '=' initializer
-	;
+  : declarator
+  | declarator '=' initializer
+  ;
 
 storage_class_specifier
-	: TYPEDEF
-	| EXTERN
-	| STATIC
-	| AUTO
-	| REGISTER
-	;
+  : TYPEDEF
+  | EXTERN
+  | STATIC
+  | AUTO
+  | REGISTER
+  ;
 
 type_specifier
-	: CHAR
-	| SHORT
-	| INT
-	| LONG
-	| SIGNED
-	| UNSIGNED
-	| FLOAT
-	| DOUBLE
-	| CONST
-	| VOLATILE
-	| VOID
-	| struct_or_union_specifier
-	| enum_specifier
-	| TYPE_NAME
-	;
+  : CHAR
+  | SHORT
+  | INT
+  | LONG
+  | SIGNED
+  | UNSIGNED
+  | FLOAT
+  | DOUBLE
+  | CONST
+  | VOLATILE
+  | VOID
+  | struct_or_union_specifier
+  | enum_specifier
+  | TYPE_NAME
+  ;
 
 struct_or_union_specifier
-	: struct_or_union identifier '{' struct_declaration_list '}'
-	| struct_or_union '{' struct_declaration_list '}'
-	| struct_or_union identifier
-	;
+  : struct_or_union identifier '{' struct_declaration_list '}'
+  | struct_or_union '{' struct_declaration_list '}'
+  | struct_or_union identifier
+  ;
 
 struct_or_union
-	: STRUCT
-	| UNION
-	;
+  : STRUCT
+  | UNION
+  ;
 
 struct_declaration_list
-	: struct_declaration
-	| struct_declaration_list struct_declaration
-	;
+  : struct_declaration
+  | struct_declaration_list struct_declaration
+  ;
 
 struct_declaration
-	: type_specifier_list struct_declarator_list ';'
-	;
+  : type_specifier_list struct_declarator_list ';'
+  ;
 
 struct_declarator_list
-	: struct_declarator
-	| struct_declarator_list ',' struct_declarator
-	;
+  : struct_declarator
+  | struct_declarator_list ',' struct_declarator
+  ;
 
 struct_declarator
-	: declarator
-	| ':' constant_expr
-	| declarator ':' constant_expr
-	;
+  : declarator
+  | ':' constant_expr
+  | declarator ':' constant_expr
+  ;
 
 enum_specifier
-	: ENUM '{' enumerator_list '}'
-	| ENUM identifier '{' enumerator_list '}'
-	| ENUM identifier
-	;
+  : ENUM '{' enumerator_list '}'
+  | ENUM identifier '{' enumerator_list '}'
+  | ENUM identifier
+  ;
 
 enumerator_list
-	: enumerator
-	| enumerator_list ',' enumerator
-	;
+  : enumerator
+  | enumerator_list ',' enumerator
+  ;
 
 enumerator
-	: identifier
-	| identifier '=' constant_expr
-	;
+  : identifier
+  | identifier '=' constant_expr
+  ;
 
 declarator
-	: declarator2
-	| pointer declarator2
-	;
+  : declarator2
+  | pointer declarator2
+  ;
 
 declarator2
-	: identifier
-	| '(' declarator ')'
-	| declarator2 '[' ']'
-	| declarator2 '[' constant_expr ']'
-	| declarator2 '(' ')'
-	| declarator2 '(' parameter_type_list ')'
-	| declarator2 '(' parameter_identifier_list ')'
-	;
+  : identifier
+  | '(' declarator ')'
+  | declarator2 '[' ']'
+  | declarator2 '[' constant_expr ']'
+  | declarator2 '(' ')'
+  | declarator2 '(' parameter_type_list ')'
+  | declarator2 '(' parameter_identifier_list ')'
+  ;
 
 pointer
-	: '*'
-	| '*' type_specifier_list
-	| '*' pointer
-	| '*' type_specifier_list pointer
-	;
+  : '*'
+  | '*' type_specifier_list
+  | '*' pointer
+  | '*' type_specifier_list pointer
+  ;
 
 type_specifier_list
-	: type_specifier
-	| type_specifier_list type_specifier
-	;
+  : type_specifier
+  | type_specifier_list type_specifier
+  ;
 
 parameter_identifier_list
-	: identifier_list
-	| identifier_list ',' ELIPSIS
-	;
+  : identifier_list
+  | identifier_list ',' ELIPSIS
+  ;
 
 identifier_list
-	: identifier
-	| identifier_list ',' identifier
-	;
+  : identifier
+  | identifier_list ',' identifier
+  ;
 
 parameter_type_list
-	: parameter_list
-	| parameter_list ',' ELIPSIS
-	;
+  : parameter_list
+  | parameter_list ',' ELIPSIS
+  ;
 
 parameter_list
-	: parameter_declaration
-	| parameter_list ',' parameter_declaration
-	;
+  : parameter_declaration
+  | parameter_list ',' parameter_declaration
+  ;
 
 parameter_declaration
-	: type_specifier_list declarator
-	| type_name
-	;
+  : type_specifier_list declarator
+  | type_name
+  ;
 
 type_name
-	: type_specifier_list
-	| type_specifier_list abstract_declarator
-	;
+  : type_specifier_list
+  | type_specifier_list abstract_declarator
+  ;
 
 abstract_declarator
-	: pointer
-	| abstract_declarator2
-	| pointer abstract_declarator2
-	;
+  : pointer
+  | abstract_declarator2
+  | pointer abstract_declarator2
+  ;
 
 abstract_declarator2
-	: '(' abstract_declarator ')'
-	| '[' ']'
-	| '[' constant_expr ']'
-	| abstract_declarator2 '[' ']'
-	| abstract_declarator2 '[' constant_expr ']'
-	| '(' ')'
-	| '(' parameter_type_list ')'
-	| abstract_declarator2 '(' ')'
-	| abstract_declarator2 '(' parameter_type_list ')'
-	;
+  : '(' abstract_declarator ')'
+  | '[' ']'
+  | '[' constant_expr ']'
+  | abstract_declarator2 '[' ']'
+  | abstract_declarator2 '[' constant_expr ']'
+  | '(' ')'
+  | '(' parameter_type_list ')'
+  | abstract_declarator2 '(' ')'
+  | abstract_declarator2 '(' parameter_type_list ')'
+  ;
 
 initializer
-	: assignment_expr
-	| '{' initializer_list '}'
-	| '{' initializer_list ',' '}'
-	;
+  : assignment_expr
+  | '{' initializer_list '}'
+  | '{' initializer_list ',' '}'
+  ;
 
 initializer_list
-	: initializer
-	| initializer_list ',' initializer
-	;
+  : initializer
+  | initializer_list ',' initializer
+  ;
 
 statement
-	: labeled_statement
-	| compound_statement
-	| expression_statement
-	| selection_statement
-	| iteration_statement
-	| jump_statement
-	;
+  : labeled_statement
+  | compound_statement
+  | expression_statement
+  | selection_statement
+  | iteration_statement
+  | jump_statement
+  ;
 
 labeled_statement
-	: identifier ':' statement
-	| CASE constant_expr ':' statement
-	| DEFAULT ':' statement
-	;
+  : identifier ':' statement
+  | CASE constant_expr ':' statement
+  | DEFAULT ':' statement
+  ;
 
 compound_statement
-	: '{' '}'
-	| '{' statement_list '}'
-	| '{' declaration_list '}'
-	| '{' declaration_list statement_list '}'
-	;
+  : '{' '}'
+  | '{' statement_list '}'
+  | '{' declaration_list '}'
+  | '{' declaration_list statement_list '}'
+  ;
 
 declaration_list
-	: declaration
-	| declaration_list declaration
-	;
+  : declaration
+  | declaration_list declaration
+  ;
 
 statement_list
-	: statement
-	| statement_list statement
-	;
+  : statement
+  | statement_list statement
+  ;
 
 expression_statement
-	: ';'
-	| expr ';'
-	;
+  : ';'
+  | expr ';'
+  ;
 
 selection_statement
-	: IF '(' expr ')' statement
-	| IF '(' expr ')' statement ELSE statement
-	| SWITCH '(' expr ')' statement
-	;
+  : IF '(' expr ')' statement
+  | IF '(' expr ')' statement ELSE statement
+  | SWITCH '(' expr ')' statement
+  ;
 
 iteration_statement
-	: WHILE '(' expr ')' statement
-	| DO statement WHILE '(' expr ')' ';'
-	| FOR '(' ';' ';' ')' statement
-	| FOR '(' ';' ';' expr ')' statement
-	| FOR '(' ';' expr ';' ')' statement
-	| FOR '(' ';' expr ';' expr ')' statement
-	| FOR '(' expr ';' ';' ')' statement
-	| FOR '(' expr ';' ';' expr ')' statement
-	| FOR '(' expr ';' expr ';' ')' statement
-	| FOR '(' expr ';' expr ';' expr ')' statement
-	;
+  : WHILE '(' expr ')' statement
+  | DO statement WHILE '(' expr ')' ';'
+  | FOR '(' ';' ';' ')' statement
+  | FOR '(' ';' ';' expr ')' statement
+  | FOR '(' ';' expr ';' ')' statement
+  | FOR '(' ';' expr ';' expr ')' statement
+  | FOR '(' expr ';' ';' ')' statement
+  | FOR '(' expr ';' ';' expr ')' statement
+  | FOR '(' expr ';' expr ';' ')' statement
+  | FOR '(' expr ';' expr ';' expr ')' statement
+  ;
 
 jump_statement
-	: GOTO identifier ';'
-	| CONTINUE ';'
-	| BREAK ';'
-	| RETURN ';'
-	| RETURN expr ';'
-	;
+  : GOTO identifier ';'
+  | CONTINUE ';'
+  | BREAK ';'
+  | RETURN ';'
+  | RETURN expr ';'
+  ;
 
 file
-	: external_definition
-	| file external_definition
-	;
+  : external_definition
+  | file external_definition
+  ;
 
 external_definition
-	: function_definition
-	| declaration
-	;
+  : function_definition
+  | declaration
+  ;
 
 function_definition
-	: declarator function_body
-	| declaration_specifiers declarator function_body
-	;
+  : declarator function_body
+  | declaration_specifiers declarator function_body
+  ;
 
 function_body
-	: compound_statement
-	| declaration_list compound_statement
-	;
+  : compound_statement
+  | declaration_list compound_statement
+  ;
 
 identifier
-	: IDENTIFIER
-	;
+  : IDENTIFIER
+  ;
 %%
 
 #include <stdio.h>
@@ -429,7 +429,7 @@
 
 void yyerror(char *s)
 {
-	fflush(stdout);
-	printf("[%4d]: %s\n", column, yytext);
-	printf("\n%*s\n%*s\n", column, "^", column, s);
+  fflush(stdout);
+  printf("[%4d]: %s\n", column, yytext);
+  printf("\n%*s\n%*s\n", column, "^", column, s);
 }