2017-02-26 2 views
0

Merci pour toute aide à l'avance!Intersection de deux regex

Je suis un cours d'automates à l'école et pour la vie de moi ne peut pas travailler l'intersection de deux regex. J'ai regardé en ligne et ici, pour trouver que je peux créer NFA pour les deux langues, les complimenter individuellement puis union (ise) - pas sûr de l'anglais ici. Ensuite, je complimente l'union pour trouver le DFA suivant et trouver la regex à partir de celle-ci, qui serait l'intersection regex. Cependant, c'est le calcul de tout cela avec lequel je me bats.

J'ai une question ci-dessous, où j'ai changé les expressions pour ne pas simplement poser une question de tutoriel. Les deux sont sur le même alphabet: {a,b,c,d}.

Laissez R1 = (a(a+d))* et R2 = ((a+b)+a+(a+d))*

J'ai développé les langues pour essayer de comprendre les mieux.

Réflexions: R1 contient le mot vide (epsilon), et des mots de longueur 2 et 4 R2 contient le mot vide, et les mots de longueur 3

La langue d'intersection subséquente doit être divisible par 6?

Je ne sais vraiment pas comment procéder à partir d'ici. S'il vous plaît quelqu'un peut-il m'aider à créer une NFA si cela serait la meilleure approche. J'ai utilisé des générateurs NFA en ligne, mais je continue à faire des erreurs lorsque je regarde les réponses des didacticiels des universités. Sur une note de côté, comment prouveriez-vous que l'expression rationnelle que vous calculez est correcte?

Merci!

+0

est-ce pas R1 équivalent à '(a (a + d)) *'? En outre, c'est "complément". – melpomene

+0

Ahh, bon point. Je vais supprimer la dernière annonce maintenant. Je vous remercie. – user62622

+0

Je viens de réaliser que je ne comprends pas votre notation. Que signifie «+»? – melpomene

Répondre

0

Il est un simple DFA pour R1:

DFA for R1

R2 = (a | b | d) * comme @melpomene a dit dans son commentaire, ce qui signifie un mot avec les lettres a, b ou d si un DFA pour R2 est évidemment:

eDFA for R2

L'intersection est R1 (tel que R2 représente tous les corps avec a, b ou d)

W e peut compléter cette DFA comme ceci:

DFA for intersection