ВУЗ:
Составители:
Рубрика:
%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
- …
- следующая ›
- последняя »