Page 113 - LENGUAJES FORMALES AUTOMATAS Y COMPILADOS
P. 113

113


                      Puede usar cualquier carácter para <símbolo actual> y <nuevo símbolo>, o '_' para representar
                  un espacio en blanco (espacio). Los símbolos distinguen entre mayúsculas y minúsculas.
                      <Dirección> debe ser 'l', 'r' o '*', que denota 'mover hacia la izquierda', 'mover hacia la derecha'
                  o 'no mover', respectivamente.
                      Cualquier cosa después de un ';' Es un comentario y es ignorado.
                      La máquina se detiene cuando alcanza cualquier estado que comienza con 'alto', por ejemplo.
                  Detener, detener-aceptar.

                  También:

                      '*' se puede usar como comodín en <símbolo actual> o <estado actual> para que coincida con
                  cualquier carácter o estado.
                      '*' se puede usar en <nuevo símbolo> o <nuevo estado> para significar 'sin cambio'.
                      '!' se puede usar al final de una línea para establecer un punto de interrupción, por ejemplo, '1
                  a b r 2!'. La máquina se detendrá automáticamente después de ejecutar esta línea.
                      Puede especificar la posición inicial de la cabeza usando '*' en la entrada inicial.

                  Ejemplo 1:

                  Este ejemplo de programa checa si un número es palíndromo.
                  ; Input: a string of 0's and 1's, eg '1001001'

                  ; Machine starts in state 0.

                  ; State 0: read the leftmost symbol
                  0 0 _ r 1o
                  0 1 _ r 1i
                  0 _ _ * accept     ; Empty input

                  ; State 1o, 1i: find the rightmost symbol
                  1o _ _ l 2o
                  1o * * r 1o

                  1i _ _ l 2i
                  1i * * r 1i

                  ; State 2o, 2i: check if the rightmost symbol matches the most recently read left-hand symbol
                  2o 0 _ l 3
                  2o _ _ * accept
                  2o * * * reject

                  2i 1 _ l 3
                  2i _ _ * accept
                  2i * * * reject

                  ; State 3, 4: return to left end of remaining input
                  3 _ _ * accept
                  3 * * l 4
                  4 * * l 4
                  4 _ _ r 0  ; Back to the beginning

                  accept * : r accept2
                  accept2 * ) * halt-accept

                  reject _ : r reject2
                  reject * _ l reject
                  reject2 * ( * halt-reject

                  Initial input: 1001001 -> aceptado en 38 pasos 
                  Initial input: 0101001 -> rechazado en 17 pasos 
   108   109   110   111   112   113   114   115   116   117   118