LINUX.ORG.RU

Lex анализатор


0

1

Здравствуйте,нужно написать простой анализатор для поиска слов в которых чередуются гласные и согласные буквы

%{
#include <stdio.h>
extern int i;
int i=0;
%}
glas [aeiouyAEIOUY]
delim [ \t\n]
soglas [bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]
id ({glas}({soglas}{glas})+)
%%
{id}      {
            
            printf("%s\t%d\n", yytext,i++);
        }
\n ;
[ ]+ ;
[^{id}] printf("1\n");
%%

но почему то слова в которых есть буквы i или d он анализирует неверно в чем проблема,спасибо

Ответ на: комментарий от kemm

ну если я ввожу строку типа aba то все ок, он ее выводит как и нужно а если строка idddddddddddddddddddi то он ее тоже выводит,хотя не должен

mikemike
() автор топика
Ответ на: комментарий от kemm

ну здесь просто без printf,это я так,что бы посмотреть когда будет выполняется эта конструкция, здесь я имел ввиду когда конструкция не такая ->ничего не делать

mikemike
() автор топика
Ответ на: комментарий от mikemike

Когда строка не содержит знаков «{», «i», «d» и «}»? Ты точно уверен, что ты хотел именно этого? 8))

btw, действие по умолчанию в лексе — выплюнуть символ в вывод.

kemm
()
Ответ на: комментарий от kemm

хм, нет я хотел что бы когда строка содержит дополнение к id,который у меня выглядит id ({glas}({soglas}{glas})+),как тогда это исправить?

mikemike
() автор топика
Ответ на: комментарий от mikemike

lex использует наилучшее совпадение (под которое попадает больше входных символов), насколько я помню.

Т.е. если тебе надо, чтобы строка «abecod» считалась нужным словом и неподходящим символом — тогда «.», если нужно отбрасывать целиком — «.+»

Вроде так, давно lex в руки не брал. Вообще, в info flex толково написано было, помнится.

kemm
()
Ответ на: комментарий от kemm

спасибо,поищу,еще вопрос как мне задать выражение что бы он искал именно слова, просто если написать [ \t]{id}[ \t] то он не будет рассматривать 1 слово

mikemike
() автор топика
Ответ на: комментарий от mikemike

еще вопрос, я вот что то не нашел есть ли там оператор объединения например я задаю множество гласных букв вручную,а множество согласных букв-[a-zA-Z]&glas?

mikemike
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.