LINUX.ORG.RU

Lex


0

1

Здравствуйте встала задача реальзовать конечный автомат на лексе

 

%{
#include <stdio.h>
%}
%x A B C D E O
%%
<INITIAL>[01] {yyless(0);printf("DFF\n");BEGIN O;}
<O>0 BEGIN A;
<O>1 BEGIN B;
<A>0 BEGIN O;
<A>1 BEGIN C;
<B>0 BEGIN C;
<B>1 BEGIN D;
<C>0 BEGIN B;
<C>1 BEGIN E;
<D>0 BEGIN E;
<D>1 BEGIN O;
<E>0 BEGIN D;
<E>1 BEGIN A;
<O>\n	{printf("Right binary expression \n");BEGIN 0;}
Однако одна проблема, если выражение является частью автомата то все хорошо однако если нет, то он становится неработоспособным, т.е. ничего воспринимать не хочет, как это исправить? спасибо

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

тогда она вообще не заходит в эти правила а сразу переходит к этому принтф

mikemike
() автор топика

конечный автомат должен быть полным. Т.е. во всех состояниях иметь возможность обрабатывать все возможные символы

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

Плохая идея, + стоит убрать, т.к. в таком случае lex будет выбирать самую длинную строку, которая всегда будет удовлетворять данному условию и работать не будет.

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