diff --git a/parser/c_compiler/parser.y b/parser/c_compiler/parser.y --- 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 @@ -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); }