Différence entre l'expression régulière et la grammaire dans les automates

12

Je suis nouveau dans les automates et je n'ai reçu une brève introduction aux expressions régulières qu'hier. J'ai lu les différentes règles qui définissent une expression régulière. Mais je suis incapable de faire la différence entre les expressions régulières et la grammaire d'une langue (on ne m'a pas appris la grammaire des expressions régulières).

Je comprends que la grammaire nous aide à générer les chaînes valides dans une langue, mais alors c'est ce que les règles pour définir un état des expressions régulières. Alors où est la différence? J'ai demandé à mon professeur et il a dit que les regex sont les chaînes les plus élémentaires d'une langue et que la grammaire est l'ensemble des règles pour n'importe quelle langue, qui sont d'un ordre plus élevé que les regex. Quelqu'un peut-il fournir des informations plus approfondies?

Charu Bansal
la source

Réponses:

22

Les expressions régulières, les grammaires régulières et les automates finis ne sont que trois formalismes différents pour la même chose. Il existe des algorithmes pour convertir l'un d'entre eux en un autre.

La raison fondamentale pour laquelle nous avons tous les trois est qu'ils ont été créés indépendamment, avec le premier ensemble d'équivalences (il existe également plusieurs autres formalismes) prouvé par Kleene (ce résultat, ou une partie de celui-ci est appelé le théorème de Kleene).

Donc, dans ce contexte, selon la direction dans laquelle vous souhaitez exécuter les modèles, ils reconnaissent ou génèrent tous des chaînes d'un langage normal, et mathématiquement, il n'y a, en ce sens, aucune différence.

Bien sûr, parfois un modèle est plus facile à utiliser qu'un autre pour une tâche particulière, en raison des détails du formalisme. De plus, la façon dont ils fonctionnent dans la tête d'un humain est souvent un peu différente, les automates finis "se sentent" comme des ordinateurs, les expressions régulières "se sentent" comme si vous construisiez une chaîne à partir de sous-chaînes plus petites et les grammaires régulières "se sentent" comme une grammaire plus traditionnelle dérivation ou classification d'une phrase dans une langue (sans surprise quand on regarde l'histoire).

Donc, pour comparer les deux, définissons-les:

Expressions régulières

Les expressions régulières sont donc définies de manière récursive comme suit:

  1. ε
  2. aaΣ
  3. AB
    • AB
    • AB
    • A

Parallèlement à certaines sémantiques (c'est-à-dire comment nous interprétons les opérateurs pour obtenir une chaîne), nous obtenons un moyen de générer des chaînes à partir d'un langage normal.

Grammaires régulières

(N,Σ,P,SN)NΣSPΣP

Grammaires linéaires droites

BCaε

  1. Ba
  2. BaC
  3. Bε

Grammaires linéaires gauches

BCa

Choses à méditer

Donc, en regardant ces définitions et en jouant avec elles, nous pouvons voir que les expressions régulières ressemblent à des règles de correspondance, ou à des façons de traiter les chaînes petit à petit.

S

Cependant, ceux-ci font vraiment la même chose fondamentale, et la façon dont vous voyez la métaphore de leur fonction dépend vraiment de vous.

Luke Mathieson
la source
Je mettrais davantage l'accent sur le fait que les grammaires génèrent des chaînes dans la langue, tandis que les expressions régulières (comme vous l'avez dit) sont davantage un modèle de correspondance qui correspond (ou "teste") à chaque chaîne de la langue.
Ran G.
@RanG., C'est en effet la façon habituelle d'y penser, mais vous pouvez inverser les deux; l'analyse ascendante teste une chaîne par rapport à une grammaire et vous pouvez utiliser une expression régulière comme description compacte d'une langue (bien que ce soit probablement moins courant).
Luke Mathieson
NSR
NRRP
@simpleBob, Ah oui, c'est définitivement une faute de frappe. Merci!
Luke Mathieson