La lingua L = {ai bj ck | i != j or j != k}
può essere semplicemente scritta come L = L1 U L2
tale che L1 = {ai bj ck | i != j }
e L1 = {ai bj ck | j != k }
.
a L non v'è alcun vincolo sul simbolo c
unica condizione è numberOf(a)
non dovrebbe essere uguale a numberOf(b)
. In entrambi i numberof(a)
>numberOf(b)
onumberof(a)
<. numberOf(b)
. Così la grammatica per questa lingua dovrebbe essere:
L1 => EX // L1 is start variable
E => aEb | A | B
X => C |^
A => aA | a
B => bB | b
C => cC | c
In grammatica sopra utilizzando E siamo in grado di generare lo stesso numero di a
e b
nel modello di anEbn
, poi a convertire questo sentimentale da in forma frase sia E
deve sostituito da B
o A
che genera una stringa nel formato tale che ai bj
con i != j
, utilizzando la variabile X
qualsiasi numero di c
può essere suffisso al modello ai bj
.
Per capire questa grammatica leggere: Tips for creating Context free grammar e Why the need for terminals? Is my solution sufficient enough?
Allo stesso modo per L non v'è alcun vincolo sul simbolo a
unica condizione è numberOf(b)
non dovrebbe essere uguale a numberOf(c)
. In entrambi i numberof(b)
>numberOf(c)
onumberof(b)
<. numberOf(c)
. Così la grammatica per questa lingua dovrebbe essere:
L2 => YF // L2 is start variable
F => bFc | B | C
Y => A |^
A => aA | a
B => bB | b
C => cC | c
Ora utilizzando sia di questa grammatica un introducendo una nuova variabile inizio S
e due nuove regole di produzione S => L1 | L2
che ottiene la grammatica per la lingua L = {ai bj ck | i != j or j != k}
.
fonte
2013-10-20 07:39:19
Aggiunta di un altro collegamento correlato [Come scrivere la grammatica per il linguaggio formale?] (Http://stackoverflow.com/questions/15559324/construct-grammar-given-the-following-language-an-bm-nm-0 -1-2-n-2/15.578.641? noredirect = 1 # comment28898425_15578641) –