Флекс — разлика између измена
Садржај обрисан Садржај додат
мНема описа измене |
м Бот: исправљена преусмерења; козметичке измене |
||
Ред 6:
вебсајт = -{[http://flex.sourceforge.net/ flex.sf.net]}- |
}}
'''-{Flex}-''' (брзи генератор [[лексички анализатор|лексичког анализатора]]) је слободна верзија -{[[Lex
Опис -{flex}--а дат је у упуству за његово коришћење:
:"-{Flex}- је програмска алатка за генерисање скенера (читача): програма који препознају лексичке шаблоне у тексту. -{Flex}- чита дату улазну датотеку или стандардни улаз, уколико име улазне датотеке није задато, ради описа читача који ће да генерише. Описи су у облику регуларних израза и -{C}- кода, и зову се правила. -{Flex}- генерише као излаз -{С}- датотеку, -{'<code>lex.yy.c</code>'}-, која позива функцију -{'<code>yylex()</code>'}-. Ова -{С}- датотека је компајлирана и повезана (линкована) са -{'<code>-lfl</code>'}- датотеком да би било могуће извршавање програма. Када се покрене програм, он анализира дати улаз тражећи онај део улаза који одговара датом регуларном изразу. Када нађе тај део улаза, онда се извршава одговарајући део -{C}- кода..."
Лексички читач који одговара
-{Flex}- заправо служи за читање знакова и прављење одговарајућих токена користећи [[детерминистички коначни аутомат]] (ДКА). ДКА је теоретска машина која прихвата [[регуларни изрази|регуларне изразе]].
== Пример лексичког анализатора ==
Ред 23:
Спољашње променљиве које се користе:
<source lang="c">
FILE *source
int cur_line, cur_col, err_line, err_col /* за извештавање о грешки */
int num
char id[]
Hashtab *keywords
</source>
Спољашње функције које се позивају:
<source lang="c">
error(const char msg[])
Hashtab *create_htab(int estimate)
int enter_htab(Hashtab *ht, char name[], void *data) /* Додаје променљиву претраживачкој табели */
Entry *find_htab(Hashtab *ht, char *s)
void *get_htab_data(Entry *entry)
FILE *fopen(char fn[], char mode[])
fgetc(FILE *stream)
ungetc(int ch, FILE *stream)
isdigit(int ch), isalpha(int ch), isalnum(int ch)
</source>
Спољашњи типови:
<source lang="c">
Symbol
Hashtab /* Репрезентује претраживачку табелу */
Entry
</source>
Ред 162:
%}
cifra
slovo
%%
"+"
"-"
"*"
"/"
"("
")"
";"
","
"."
":="
"="
"<>"
"<"
">"
"<="
">="
"begin"
"call"
"const"
"do"
"end"
"if"
"odd"
"procedure"
"then"
"var"
"while"
{letter}({letter}|{digit})* {
yylval.id = (char *)strdup(yytext);
return IDENTIFIKATOR; }
{digit}+
return BROJ; }
[ \t\n\r]
.
return NEPOZNATO; }
%%
Ред 211:
== Погледајте још ==
* [[Lex]]
* [[GNU bison|Bison (yacc) parser generator]]
* [http://www.gnu.org/software/flex/manual/ Flex Manual]
* [http://www.cs.wwc.edu/~aabyan/464/Book/index.html Compiler Construction using Flex and Bison] - Course by Anthony Aaby, a Romanian rebuild version of this book in pdf format may be downloaded from [http://cs.wwc.edu/~aabyan/Linux/fb2-press.pdf fb2-press.pdf] or [http://cs.wwc.edu/~aabyan/Linux/fb2-printing.pdf fb2-printing.pdf]
|