validate test regulares regexp expresiones example ejemplos ejemplo regex prolog grammar dcg

test - regexp javascript



¿Peinar la expresión regular impar e incluso regular a la gramática regular? (1)

Aquí hay una posible solución en SWI-Prolog:

:- use_module(library(clpfd)). :- use_module(library(lambda)). odd_even(Lst) :- variables_signature(Lst, Sigs), automaton(Sigs, _, Sigs, % start in s, end in i [source(s), sink(i)], % if we meet 0, counter A of a is incremented of one modulo 2 % the others are unchanged [arc(s, 0, s, [(A+1) mod 2, B, C]), arc(s, 1, s, [A, (B+1)mod 2, C]), arc(s, 2, s, [A, B, (C+1) mod 2]), arc(s, 0, i, [(A+1) mod 2, B, C]), arc(s, 1, i, [A, (B+1)mod 2, C]), arc(s, 2, i, [A, B, (C+1) mod 2])], % name of counters [A, B, C], % initial values of counters [0, 0, 0], % needed final values of counters [1,0,1]). % replace a with 0, b with 1, c with 2 variables_signature(Lst, Sigs) :- maplist(/X^Y^(X = a -> Y = 0; (X = b -> Y = 1; Y = 2)), Lst, Sigs).

Ejemplo:

?- odd_even([a,c,c,a,c,c,a,c]). true. ?- odd_even([a,c,c,a,c,c,a]). false.

Tengo esta clase para la que necesito escribir gramática regular. La gramática es {a, b, c} donde hay un número impar de a''s yc''s, pero un número par de b''s.

Ejemplos de buenas cadenas:

  • babc
  • abcb
  • cbba
  • accaccac
  • C.A

Malos hilos

  • babcb
  • a B C
  • cbbca
  • Accacca
  • Automóvil club británico
  • *cuerda vacía

Mi expresión regular para incluso b es b∗(ab∗ab∗)∗b∗ (No sé dónde incluir c)

Mi expresión regular para los impares es (c|a(b|c)*a)*a(b|c)*

Mi expresión regular para las c extrañas es (c|a(b|c)*c)*c(b|c)*

Estoy pensando que una gramática regular se vería así:

s -> [a], a s -> [c], c a -> [a], a a -> [b], b a -> [c], c b -> [b] b -> [b], b b -> [a], a b -> [c], c c -> [c], c c -> [a], a c -> [b], b

Creo que es evidente que estoy perdido. ¡Cualquier ayuda es apreciada!