ВУЗ:
Составители:
Рубрика:
2a S b<cE>
2b <cE> cE правило 2.
2c E .
3a S a<bbS>
3b S cA правило 3
3c S
7.9. LEX
lex и yacc - программы, содержащие средства для написания компилятора.
lex – программа (в терминах UNIX – команда) лексического анализа облегчает задачу
выделения лексем.
yacc - программа синтаксического анализа.
Структура lex – программ:
%{ Вставка фрагмента программы на Си
%}
Раздел деклараций : имя_значение.
%%
Раздел правил : шаблон_действие.
%%
Пользовательский код.
Раздел деклараций:
%token лексемы
Раздел правил:
нетерминал: | цепочка символов { код на Си }
;
%%
start : ‘x’ lettera ‘y’ lettera ‘\n’ { (printf(“Ok\n”); }
;
lettera : ‘z’ letterb
| ‘z’
;
letterb : ‘,’ ‘z’ letterb
| ‘,’ ‘z’
;
Пример 1:
%%
yyerror( str )
char *str;
{ printf( “error: %s”,str); }
yylex()
{
int c=getchar();
return(c);
}
main()
{ yyparse();}
____________________prog.y
— 79 —
{
}
{
}
{ }
2a S b
2b cE правило 2.
2c E .
{ }
3a S a
3b S cA правило 3
3c S
7.9. LEX
lex и yacc - программы, содержащие средства для написания компилятора.
lex – программа (в терминах UNIX – команда) лексического анализа облегчает задачу
выделения лексем.
yacc - программа синтаксического анализа.
Структура lex – программ:
%{ Вставка фрагмента программы на Си
%}
Раздел деклараций : имя_значение.
%%
Раздел правил : шаблон_действие.
%%
Пользовательский код.
Раздел деклараций:
%token лексемы
Раздел правил:
нетерминал: | цепочка символов { код на Си }
;
%%
start : ‘x’ lettera ‘y’ lettera ‘\n’ { (printf(“Ok\n”); }
;
lettera : ‘z’ letterb
| ‘z’
;
letterb : ‘,’ ‘z’ letterb
| ‘,’ ‘z’
;
Пример 1:
%%
yyerror( str )
char *str;
{ printf( “error: %s”,str); }
yylex()
{
int c=getchar();
return(c);
}
main()
{ yyparse();}
____________________prog.y
— 79 —
Страницы
- « первая
- ‹ предыдущая
- …
- 77
- 78
- 79
- 80
- 81
- …
- следующая ›
- последняя »
