# HG changeset patch # User Markus Bröker # Date 1239878951 -7200 # Node ID 48f6f3918b8205716261f052ddc4ab9def758eb6 # Parent 0fbbe329c3a20e06cc2f3127a4c6da4e33358336 Project Split finished committer: Markus Bröker diff --git a/parser/calc/Makefile b/parser/calc/Makefile --- a/parser/calc/Makefile +++ b/parser/calc/Makefile @@ -2,21 +2,21 @@ LD=ld YACC=bison -y FLEX=flex -CFLAGS=-Wall -O2 -ansi +CFLAGS=-Wall -O2 -ansi -D_XOPEN_SOURCE=500 LDFLAGS= INCLUDE=include OBJECTS=main.o parser.o lexer.o -TARGET=parser +TARGET=calc -.SUFFIXES: .c .yy .ll +.SUFFIXES: .c .y .l .c.o: $(CC) -c $(CFLAGS) -I$(INCLUDE) $(CONFIG) $< -.yy.c: +.y.c: $(YACC) -d $< -o $@ -.ll.c: +.l.c: $(FLEX) -o $@ $< all: $(TARGET) @@ -30,6 +30,7 @@ clean: rm -f *.[oae]; rm -f *~; + rm -f parser.h distclean: make clean diff --git a/parser/calc/lexer.l b/parser/calc/lexer.l --- a/parser/calc/lexer.l +++ b/parser/calc/lexer.l @@ -10,14 +10,14 @@ %% -[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/main.c b/parser/calc/main.c --- a/parser/calc/main.c +++ b/parser/calc/main.c @@ -1,5 +1,5 @@ /** - * test/demos/parser/main.c + * test/demos/parser/calc/main.c * Copyright (C) 2008 Markus Broeker */ diff --git a/parser/calc/parser.y b/parser/calc/parser.y --- a/parser/calc/parser.y +++ b/parser/calc/parser.y @@ -7,9 +7,9 @@ #include #include - int regs[26]; + int regs[26]; int base; - + int yyerror(); int yylex(); %} @@ -20,65 +20,67 @@ %left UMINUS %% -list : /* empty */ - | list stat '\n' +list: + /* empty */ + | list stat '\n' | list error '\n' { yyerrok; }; -stat : - expr { (void) printf( "RESULT: %d\n", $1 ); } +stat: + 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: + '(' 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; - } - ; - +number: + DIGIT + { + $$ = $1; base = ($1==0) ? 8 : 10; + } + | number DIGIT + { + $$ = base * $1 + $2; + } + ; %% -int yyerror() +int yyerror() { printf("ERROR\n"); return 0; } -int yywrap() +int yywrap() { return 1; }