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