Project Parser
authorMarkus Bröker <mbroeker@largo.dyndns.tv>
Thu, 16 Apr 2009 12:49:11 +0200
changeset 39 46d7ec9d63bd
parent 38 48f6f3918b82
child 40 be3f5582b839
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 <mbroeker@largo.homelinux.org>
Makefile
parser/c_compiler/lexer.l
parser/c_compiler/parser.y
parser/c_compiler/test/error.c
parser/c_compiler/test/test.c
parser/calc/Makefile
parser/calc/lexer.l
parser/calc/parser.y
--- 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
--- a/parser/c_compiler/lexer.l
+++ b/parser/c_compiler/lexer.l
@@ -1,151 +1,150 @@
 %{
-	#include <prototypes.h>
-	#include "parser.h"
-	int column = 0;
-	int c;
+    #include <prototypes.h>
+    #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 != '/');
 }
--- 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);
 }
--- a/parser/c_compiler/test/error.c
+++ b/parser/c_compiler/test/error.c
@@ -1,11 +1,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-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;
 }
--- a/parser/c_compiler/test/test.c
+++ b/parser/c_compiler/test/test.c
@@ -1,11 +1,11 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-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;
 }
--- 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:
--- a/parser/calc/lexer.l
+++ b/parser/calc/lexer.l
@@ -4,20 +4,20 @@
  */
 
 %{
-	#include <stdio.h>
-	#include "parser.h"
+    #include <stdio.h>
+    #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); }
 %%
--- 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;
 }