web-dev-qa-db-fra.com

Étapes pour créer un NFA à partir d'une expression régulière

Je rencontre des problèmes 'décrivant chaque étape' lors de la création d'une NFA à partir d'une expression régulière. La question est la suivante:

Convertissez l'expression régulière suivante en un automate à états finis non déterministe, décrivant clairement les étapes de l'algorithme que vous utilisez: (B | a) * b (a | b)

J'ai créé une machine simple à 3 états mais elle provient d'une intuition ..__ Ceci est une question d'un examen passé écrit par mon conférencier, qui a également écrit l'explication suivante de l'algorithme de Thompson: http: // www .cs.may.ie/staff/jpower/Courses/Précédent/Parsing/node5.html

Quelqu'un peut-il expliquer comment "décrire chaque étape clairement"? Cela ressemble à un ensemble de règles de base plutôt qu’à un algorithme avec des étapes à suivre.

Peut-être y a-t-il un algorithme que j'ai survolé quelque part, mais jusqu'à présent je l'ai simplement créé avec une supposition éclairée.

22
kiliki

Dans le référentiel GitHub ci-dessous, vous pouvez trouver une implémentation Java de la construction de Thompson dans laquelle un NFA est d'abord créé à partir de l'expression rationnelle, puis une chaîne d'entrée est comparée à ce NFA:

https://github.com/meghdadFar/regex

1
MAZDAK