Non-déterminisme

2 rubans
5 états
non-déterministe

Simulateur
: Exemple

# d'étapes : 0
q0
ababaaabaaa
#

Spécification de la machine

1:// La spécification commence par un en-tête:
2:name : Exemple // (optionnel)
3:init : q0 // Voici comment on définit
4: // l'état initial,
5:accept : q2 // et l'état final.
6:output : 2 // (optionnel)
7: // Indique le ruban de sortie.
8:option : non-det // Indique une machine non-déterministe.
9:
10:// Ensuite, viennnent les transitions:
11:q0,a,_ // condition d'activation
12:q0,_,a,>,< // effet
13:
14:// Voici une transition qui est en conflit avec la première:
15:q0,a,_
16:nope,a,_,>,-
17:
18:// Symboles acceptés :
19:// toute chaîne de caractères de longueur 1
20:// différente de ','.
21:
22:// Noms d'états acceptés :
23:// toute chaîne de caractères ne contenant pas
24:// les symboles ',' ni ':'.
25:
26:// Directions de déplacement :
27:// - : reste en place
28:// > : déplace la tête de lecture vers la droite
29:// < : déplace la tête de lecture vers la gauche
30:
31:q0,b,_ // Cette transition peut être activée
32: // lorsque l'état courant est q0, que
33: // le premier ruban affiche le symbole b,
34: // et que le second ruban affiche une
35: // case vide.
36:q1,b,_,>,< // Lors de son exécution, elle change
37: // l'état courant en q1, efface le b du
38: // premier ruban, écrit un a sur le second,
39: // et déplace la première tête de
40: // lecture vers la droite et la seconde
41: // vers la gauche.
42:
43:// Les expressions avec un dollar sur la seconde
44:// ligne d'une transition font référence au contenu
45:// du ruban d'entrée.
46:// Par exemple, la transition ci-dessous :
47:
48:q1,a,_
49:q1,$2,$1,>,<
50:
51://est équivalente à la transition commentée:
52:// q1,a,_
53:// q1,_,a,>,<
54:
55:q1,b,_
56:q0,b,_,>,<
57:
58:q1,_,_
59:q2,_,_,-,-
60:
61:
62:// Les expressions (non-vides) entre crochets sur
63:// la première ligne d'une transition permettent
64:// d'activer la transition dès que la tête de lecture
65:// du ruban correspondant se trouve sur un symbole
66:// appartenant à la liste entre crochets.
67:// Par exemple, la transition ci-dessous:
68:
69:q0,[01],[_a]
70:q3,_ ,a,>,>
71:
72:// est équivalente aux transitions suivantes:
73:
74:// q0,0,_
75:// q3,_,a,>,>
76://
77:// q0,1,_
78:// q3,_,a,>,>
79://
80:// q0,0,a
81:// q3,_,a,>,>
82://
83:// q0,1,a
84:// q3,_,a,>,>
85:
86:// Ces constructions peuvent être combinées.
87:// Cela permet par exemple d'écrire une transition
88:// comme ceci:
89:
90:q3,[01],[_a]
91:q0,_,$1,>,<
92:
93:// qui peut également être réalisée par
94:// les transitions suivantes:
95:
96:// q3,0,_
97:// q0,_,0,>,<
98://
99:// q3,1,_
100:// q0,_,1,>,<
101://
102:// q3,0,a
103:// q0,_,0,>,<
104://
105:// q3,1,a
106:// q0,_,1,>,<
107:
108:

Messages de sortie du compilateur

Compilation réussie !
2 rubans
5 états : { q0, q2, nope, q1, q3 }
transitions : {
q0 -[a,_/_,a,>,<]-> q0,
q0 -[a,_/a,_,>,-]-> nope,
q0 -[b,_/b,_,>,<]-> q1,
q0 -[[01],[_a]/_,a,>,>]-> q3,
q1 -[a,_/$2,$1,>,<]-> q1,
q1 -[b,_/b,_,>,<]-> q0,
q1 -[_,_/_,_,-,-]-> q2,
q3 -[[01],[_a]/_,$1,>,<]-> q0
}
état initial : q0, états finaux : { q2 }
alphabet : { a, _, b, 0, 1 }

Updated: