ВУЗ:
Составители:
Рубрика:
%token X Y Z P
%%
text : start
| text start
start : X lettera Y lettera ( printf(“Ok”); )
;
lettera : Z
| Z P lettera
;
%%
yyerror( str )
char *str;
{ printf( “error: %s”,str); }
____________________prog.1
%{
#include “y.tab.h”
%}
%%
x {return(X);}
y {return(Y);}
z {return(Z);}
[,] {return(P);}
. {return(yytext[0]);}
%%
main()
{ uuparse(); }
Для выполнения необходимы следующие действия :
$ yacc -d prog.y
# генерируется y.tab.c, содержащий основную программу
# по -d создается y.tab.h, в котором описываются макросы X Y Z P
$ lex prog.1
# создается lex.yy.c с функцией yylex - распознаватель лексем
# используется в функции yyparse
$ cc -o prog y.tab.c lex.yy.c
$ prog
Пример 2:
digit [0-9]
letter [a-z A-Z]
%%
{digit}+_{printf(“const\n”);
return (const);}
{letter}({letter}|{digit})*{printf(“var\n”);return(var);}
“+” | ”-” | ”*” | ”/”{printf(“zn\n”);
return(zn);}
“=“_{printf(“eq\n”);
return(eq);}
Если ввести а1=а1+с3-13 будет var
eq
var
zn
var
zn
— 80 —
%token X Y Z P
%%
text : start
| text start
start : X lettera Y lettera ( printf(“Ok”); )
;
lettera : Z
| Z P lettera
;
%%
yyerror( str )
char *str;
{ printf( “error: %s”,str); }
____________________prog.1
%{
#include “y.tab.h”
%}
%%
x {return(X);}
y {return(Y);}
z {return(Z);}
[,] {return(P);}
. {return(yytext[0]);}
%%
main()
{ uuparse(); }
Для выполнения необходимы следующие действия :
$ yacc -d prog.y
# генерируется y.tab.c, содержащий основную программу
# по -d создается y.tab.h, в котором описываются макросы X Y Z P
$ lex prog.1
# создается lex.yy.c с функцией yylex - распознаватель лексем
# используется в функции yyparse
$ cc -o prog y.tab.c lex.yy.c
$ prog
Пример 2:
digit [0-9]
letter [a-z A-Z]
%%
{digit}+_{printf(“const\n”);
return (const);}
{letter}({letter}|{digit})*{printf(“var\n”);return(var);}
“+” | ”-” | ”*” | ”/”{printf(“zn\n”);
return(zn);}
“=“_{printf(“eq\n”);
return(eq);}
Если ввести а1=а1+с3-13 будет var
eq
var
zn
var
zn
— 80 —
Страницы
- « первая
- ‹ предыдущая
- …
- 78
- 79
- 80
- 81
- 82
- …
- следующая ›
- последняя »
