linux-l: yacc/bison libary nicht da?!
Andreas Fitzner
fitzner at informatik.hu-berlin.de
Sa Jan 22 13:01:33 CET 2000
Hallo MitLinuxer,
ich habe eine ganz einfache yacc datei (siehe attachement). nur
ein paar zeilen. problem: ich kann diese datei nicht auf
linux uebersetzen. auf solaris und freebsd klappt alles wunderbar.
yacc a.y
gcc y.tab.c -ly -o a
problem unter linux (unter slackware 7.0 und redhat 6.0 probiert)
hat er die liby* nicht. ich hab auch gesucht ob man die irgendwie
nachinstallieren muss, nix gefunden. aber ohne -ly findet er
logischer weise symbole wie yyparse() oder yyerror nicht.
wie kann ich denn auf linux yacc dateien kompilieren?
ich kann ja mit yacc oder bison die zu eine c datei (y.tab.c)
uebersetzten lassen, aber wie die kompilieren zu einem
executable?
vielen Dank,
Andreas
-------------- nächster Teil --------------
%{
/* gut fuer printf */
# include <stdio.h>
/* fuer getchar */
# include <ctype.h>
/*
uebersetzung:
yacc a.y
gcc y.tab.c -ly -o a
bsp:
echo 1+1 | ./a
*/
%}
%token DIGIT
%left '+'
%left '*'
%%
list :
| list '\n'
| list stat '\n'
| list error '\n' {yyerrok; printf("\n"); }
;
stat : expr {printf(" .\n");}
;
expr : '(' expr ')'
| expr '+' expr {printf(" +");}
| expr '*' expr {printf(" *");}
| digit {printf(" %d", $1);}
;
digit : DIGIT {$$=$1; }
;
%%
yylex(){
int c,d;
while ((c=getchar())==' ');
if (isdigit(c)){
yylval=c-'0'; return DIGIT;
}
return(c);
}
/*
Script started on Fri Nov 19 15:02:48 1999
$ ./a
1
1 .
3+5+7*5
3 5 + 7 5 * + .
2*4
2 4 * .
3**5+4
parse error
3
9+4
9 4 + .
99*1+(3+4)
9 .
parse error
5+((2*4)+5*7)
5 2 4 * 5 7 * + + .
6*1+3*(5+1)
6 1 * 3 5 1 + * + .
$ exit
exit
script done on Fri Nov 19 15:05:29 1999
*/
Mehr Informationen über die Mailingliste linux-l