Специальная математика. Соловьев А.Е. - 80 стр.

UptoLike

Составители: 

Рубрика: 

%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 —