# HG changeset patch # User Markus Bröker # Date 1239878951 -7200 # Node ID 46d7ec9d63bd4678f8f017116b4efd138e5a1cca # Parent 48f6f3918b8205716261f052ddc4ab9def758eb6 Project Parser * c_compiler from http://www.csd.uwo.ca/courses/CS447a/parts/ansi-c-grammar/ * calc from the bison documentation committer: Markus Bröker diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -100,7 +100,7 @@ @$(CC) $(CFLAGS) -o $@ $< data_types: data_types.c - @echo Linking $< ... + @echo Compiling $< ... @$(CC) $(CFLAGS) -std=c99 -o $@ $< dnsresolve: dnsresolve.o diff --git a/parser/c_compiler/lexer.l b/parser/c_compiler/lexer.l --- a/parser/c_compiler/lexer.l +++ b/parser/c_compiler/lexer.l @@ -1,151 +1,150 @@ %{ - #include - #include "parser.h" - int column = 0; - int c; + #include + #include "parser.h" + int column = 0; + int c; %} -D [0-9] -L [a-zA-Z_] -H [a-fA-F0-9] -E [Ee][+-]?{D}+ -FS (f|F|l|L) -IS (u|U|l|L)* +D [0-9] +L [a-zA-Z_] +H [a-fA-F0-9] +E [Ee][+-]?{D}+ +FS (f|F|l|L) +IS (u|U|l|L)* %% -"/*" { comment(); } -"#include <" { c = input(); while ( c != '>') c = input(); } -"#include \"" { c = input(); while ( c != '\"') c = input(); } +"/*" { comment(); } +"#include <" { c = input(); while ( c != '>') c = input(); } +"#include \"" { c = input(); while ( c != '\"') c = input(); } -"auto" { count(); return(AUTO); } -"break" { count(); return(BREAK); } -"case" { count(); return(CASE); } -"char" { count(); return(CHAR); } -"const" { count(); return(CONST); } -"continue" { count(); return(CONTINUE); } -"default" { count(); return(DEFAULT); } -"do" { count(); return(DO); } -"double" { count(); return(DOUBLE); } -"else" { count(); return(ELSE); } -"enum" { count(); return(ENUM); } -"extern" { count(); return(EXTERN); } -"float" { count(); return(FLOAT); } -"for" { count(); return(FOR); } -"goto" { count(); return(GOTO); } -"if" { count(); return(IF); } -"int" { count(); return(INT); } -"long" { count(); return(LONG); } -"register" { count(); return(REGISTER); } -"return" { count(); return(RETURN); } -"short" { count(); return(SHORT); } -"signed" { count(); return(SIGNED); } -"sizeof" { count(); return(SIZEOF); } -"static" { count(); return(STATIC); } -"struct" { count(); return(STRUCT); } -"switch" { count(); return(SWITCH); } -"typedef" { count(); return(TYPEDEF); } -"union" { count(); return(UNION); } -"unsigned" { count(); return(UNSIGNED); } -"void" { count(); return(VOID); } -"volatile" { count(); return(VOLATILE); } -"while" { count(); return(WHILE); } +"auto" { count(); return(AUTO); } +"break" { count(); return(BREAK); } +"case" { count(); return(CASE); } +"char" { count(); return(CHAR); } +"const" { count(); return(CONST); } +"continue" { count(); return(CONTINUE); } +"default" { count(); return(DEFAULT); } +"do" { count(); return(DO); } +"double" { count(); return(DOUBLE); } +"else" { count(); return(ELSE); } +"enum" { count(); return(ENUM); } +"extern" { count(); return(EXTERN); } +"float" { count(); return(FLOAT); } +"for" { count(); return(FOR); } +"goto" { count(); return(GOTO); } +"if" { count(); return(IF); } +"int" { count(); return(INT); } +"long" { count(); return(LONG); } +"register" { count(); return(REGISTER); } +"return" { count(); return(RETURN); } +"short" { count(); return(SHORT); } +"signed" { count(); return(SIGNED); } +"sizeof" { count(); return(SIZEOF); } +"static" { count(); return(STATIC); } +"struct" { count(); return(STRUCT); } +"switch" { count(); return(SWITCH); } +"typedef" { count(); return(TYPEDEF); } +"union" { count(); return(UNION); } +"unsigned" { count(); return(UNSIGNED); } +"void" { count(); return(VOID); } +"volatile" { count(); return(VOLATILE); } +"while" { count(); return(WHILE); } -{L}({L}|{D})* { count(); return(check_type()); } -0[xX]{H}+{IS}? { count(); return(CONSTANT); } -0{D}+{IS}? { count(); return(CONSTANT); } -{D}+{IS}? { count(); return(CONSTANT); } -'(\\.|[^\\'])+' { count(); return(CONSTANT); } +{L}({L}|{D})* { count(); return(check_type()); } +0[xX]{H}+{IS}? { count(); return(CONSTANT); } +0{D}+{IS}? { count(); return(CONSTANT); } +{D}+{IS}? { count(); return(CONSTANT); } +'(\\.|[^\\'])+' { count(); return(CONSTANT); } -{D}+{E}{FS}? { count(); return(CONSTANT); } -{D}*"."{D}+({E})?{FS}? { count(); return(CONSTANT); } -{D}+"."{D}*({E})?{FS}? { count(); return(CONSTANT); } - -\"(\\.|[^\\"])*\" { count(); return(STRING_LITERAL); } +{D}+{E}{FS}? { count(); return(CONSTANT); } +{D}*"."{D}+({E})?{FS}? { count(); return(CONSTANT); } +{D}+"."{D}*({E})?{FS}? { count(); return(CONSTANT); } -">>=" { count(); return(RIGHT_ASSIGN); } -"<<=" { count(); return(LEFT_ASSIGN); } -"+=" { count(); return(ADD_ASSIGN); } -"-=" { count(); return(SUB_ASSIGN); } -"*=" { count(); return(MUL_ASSIGN); } -"/=" { count(); return(DIV_ASSIGN); } -"%=" { count(); return(MOD_ASSIGN); } -"&=" { count(); return(AND_ASSIGN); } -"^=" { count(); return(XOR_ASSIGN); } -"|=" { count(); return(OR_ASSIGN); } -">>" { count(); return(RIGHT_OP); } -"<<" { count(); return(LEFT_OP); } -"++" { count(); return(INC_OP); } -"--" { count(); return(DEC_OP); } -"->" { count(); return(PTR_OP); } -"&&" { count(); return(AND_OP); } -"||" { count(); return(OR_OP); } -"<=" { count(); return(LE_OP); } -">=" { count(); return(GE_OP); } -"==" { count(); return(EQ_OP); } -"!=" { count(); return(NE_OP); } -";" { count(); return(';'); } -"{" { count(); return('{'); } -"}" { count(); return('}'); } -"," { count(); return(','); } -":" { count(); return(':'); } -"=" { count(); return('='); } -"(" { count(); return('('); } -")" { count(); return(')'); } -"[" { count(); return('['); } -"]" { count(); return(']'); } -"." { count(); return('.'); } -"&" { count(); return('&'); } -"!" { count(); return('!'); } -"~" { count(); return('~'); } -"-" { count(); return('-'); } -"+" { count(); return('+'); } -"*" { count(); return('*'); } -"/" { count(); return('/'); } -"%" { count(); return('%'); } -"<" { count(); return('<'); } -">" { count(); return('>'); } -"^" { count(); return('^'); } -"|" { count(); return('|'); } -"?" { count(); return('?'); } +\"(\\.|[^\\"])*\" { count(); return(STRING_LITERAL); } -[ \t\v\n\f] { count(); } -. { printf ("Unknown Token: %s\n", yytext); } +">>=" { count(); return(RIGHT_ASSIGN); } +"<<=" { count(); return(LEFT_ASSIGN); } +"+=" { count(); return(ADD_ASSIGN); } +"-=" { count(); return(SUB_ASSIGN); } +"*=" { count(); return(MUL_ASSIGN); } +"/=" { count(); return(DIV_ASSIGN); } +"%=" { count(); return(MOD_ASSIGN); } +"&=" { count(); return(AND_ASSIGN); } +"^=" { count(); return(XOR_ASSIGN); } +"|=" { count(); return(OR_ASSIGN); } +">>" { count(); return(RIGHT_OP); } +"<<" { count(); return(LEFT_OP); } +"++" { count(); return(INC_OP); } +"--" { count(); return(DEC_OP); } +"->" { count(); return(PTR_OP); } +"&&" { count(); return(AND_OP); } +"||" { count(); return(OR_OP); } +"<=" { count(); return(LE_OP); } +">=" { count(); return(GE_OP); } +"==" { count(); return(EQ_OP); } +"!=" { count(); return(NE_OP); } +";" { count(); return(';'); } +"{" { count(); return('{'); } +"}" { count(); return('}'); } +"," { count(); return(','); } +":" { count(); return(':'); } +"=" { count(); return('='); } +"(" { count(); return('('); } +")" { count(); return(')'); } +"[" { count(); return('['); } +"]" { count(); return(']'); } +"." { count(); return('.'); } +"&" { count(); return('&'); } +"!" { count(); return('!'); } +"~" { count(); return('~'); } +"-" { count(); return('-'); } +"+" { count(); return('+'); } +"*" { count(); return('*'); } +"/" { count(); return('/'); } +"%" { count(); return('%'); } +"<" { count(); return('<'); } +">" { count(); return('>'); } +"^" { count(); return('^'); } +"|" { count(); return('|'); } +"?" { count(); return('?'); } +[ \t\v\n\f] { count(); } +. { printf ("Unknown Token: %s\n", yytext); } %% int yywrap() { - /* stop after eof */ - return 1; + /* stop after eof */ + return 1; } int count() { - int i; + int i; - for (i = 0; yytext[i] != '\0'; i++) - if (yytext[i] == '\n') - column = 0; - else if (yytext[i] == '\t') - column += 4 - (column % 4); - else - column++; + for (i = 0; yytext[i] != '\0'; i++) + if (yytext[i] == '\n') + column = 0; + else if (yytext[i] == '\t') + column += 4 - (column % 4); + else + column++; - return column; + return column; } int check_type() { - return IDENTIFIER; + return IDENTIFIER; } -void comment() +void comment() { - int c; + int c; - c = input(); - do { - while ( c != '*') - c = input(); - c=input(); - } while(c != '/'); + c = input(); + do { + while ( c != '*') + c = input(); + c=input(); + } while(c != '/'); } 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); } diff --git a/parser/c_compiler/test/error.c b/parser/c_compiler/test/error.c --- a/parser/c_compiler/test/error.c +++ b/parser/c_compiler/test/error.c @@ -1,11 +1,12 @@ #include #include -int main(int argc, char **argv) +int main (int argc, char **argv) { - FILE *fp; + FILE *fp; - printf ("Hello, world\n") + /* ERROR SEMICOLON IS MISSING */ + printf ("Hello, world\n") - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/parser/c_compiler/test/test.c b/parser/c_compiler/test/test.c --- a/parser/c_compiler/test/test.c +++ b/parser/c_compiler/test/test.c @@ -1,11 +1,11 @@ #include #include -int main(int argc, char **argv) +int main (int argc, char **argv) { - FILE *fp; + FILE *fp; - printf ("Hello, world\n"); + printf ("Hello, world\n"); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/parser/calc/Makefile b/parser/calc/Makefile --- a/parser/calc/Makefile +++ b/parser/calc/Makefile @@ -10,7 +10,7 @@ .SUFFIXES: .c .y .l -.c.o: +.c.o: $(CC) -c $(CFLAGS) -I$(INCLUDE) $(CONFIG) $< .y.c: diff --git a/parser/calc/lexer.l b/parser/calc/lexer.l --- a/parser/calc/lexer.l +++ b/parser/calc/lexer.l @@ -4,20 +4,20 @@ */ %{ - #include - #include "parser.h" + #include + #include "parser.h" %} %% -[0-9]+ { yylval = atoi(yytext); return DIGIT; } -[a-zA-Z] { yylval = yytext[0]; return LETTER; } -"+" { return PLUS; } -"-" { return MINUS; } -"*" { return MUL; } -"/" { return DIV; } -"("|")"|"=" { return yytext[0]; } -[ \t]+ {} -\n { return yytext[0]; } -. { printf("FEHLER: %s\n", yytext); } +[0-9]+ { yylval = atoi(yytext); return DIGIT; } +[a-zA-Z] { yylval = yytext[0]; return LETTER; } +"+" { return PLUS; } +"-" { return MINUS; } +"*" { return MUL; } +"/" { return DIV; } +"("|")"|"=" { return yytext[0]; } +[ \t]+ {} +\n { return yytext[0]; } +. { printf("FEHLER: %s\n", yytext); } %% diff --git a/parser/calc/parser.y b/parser/calc/parser.y --- a/parser/calc/parser.y +++ b/parser/calc/parser.y @@ -21,66 +21,66 @@ %% list: - /* empty */ - | list stat '\n' - | list error '\n' { yyerrok; }; + /* empty */ + | list stat '\n' + | list error '\n' { yyerrok; }; stat: - expr { (void) printf( "RESULT: %d\n", $1 ); } - | LETTER '=' expr { regs[$1] = $3; } - ; + expr { (void) printf( "RESULT: %d\n", $1 ); } + | LETTER '=' expr { regs[$1] = $3; } + ; expr: - '(' expr ')' - { - $$ = $2; - } - | expr PLUS expr - { - $$ = $1 + $3; - } - | expr MINUS expr - { - $$ = $1 - $3; - } - | expr MUL expr - { - $$ = $1 * $3; - } - | expr DIV expr - { - $$ = $1 / $3; - } - | MINUS expr %prec UMINUS - { - $$ = -$2; - } - | LETTER - { - $$ = regs[$1]; - } - | number - ; + '(' expr ')' + { + $$ = $2; + } + | expr PLUS expr + { + $$ = $1 + $3; + } + | expr MINUS expr + { + $$ = $1 - $3; + } + | expr MUL expr + { + $$ = $1 * $3; + } + | expr DIV expr + { + $$ = $1 / $3; + } + | MINUS expr %prec UMINUS + { + $$ = -$2; + } + | LETTER + { + $$ = regs[$1]; + } + | number + ; number: - DIGIT - { - $$ = $1; base = ($1==0) ? 8 : 10; - } - | number DIGIT - { - $$ = base * $1 + $2; - } - ; + DIGIT + { + $$ = $1; base = ($1==0) ? 8 : 10; + } + | number DIGIT + { + $$ = base * $1 + $2; + } + ; %% int yyerror() { - printf("ERROR\n"); - return 0; + printf("ERROR\n"); + return 0; } int yywrap() { - return 1; + return 1; }