Operacje String - String operations

W informatyce , w dziedzinie teorii języków formalnych , często korzysta się z różnych funkcji string ; Jednak notacja stosowana jest inna od tej stosowanej do programowania , a niektóre powszechnie używane funkcje w sferze teoretycznej są rzadko stosowane podczas programowania. Ten artykuł określa niektóre z tych podstawowych pojęć.

Struny i języki

Ciąg jest skończonym ciągiem znaków. Pusty ciąg oznaczamy przez . Konkatenacją dwa łańcucha i jest oznaczony lub krótszy . Złączenie z pustym ciągiem znaków nie ma znaczenia: . Konkatenacji ciągów jest łączne: .

Na przykład .

Język jest skończony lub nieskończony zbiór ciągów. Oprócz zwykłych zestaw operacji, takich jak unia, skrzyżowania itp konkatenacji może być stosowana do językach: jeśli oba i są językami, ich powiązanie jest zdefiniowany jako zbiór powiązań, o dowolny ciąg od i dowolny ciąg od formalnie . Ponownie, dot konkatenację często jest pominięty dla zachowania zwięzłości.

Język składający się tylko z pustym ciągiem należy odróżnić od pustego języku . Łącząc dowolny język z dawna nie czyni żadnej zmiany: , natomiast łączenie z nią zawsze daje pusty język: . Łączenie języków jest łączne: .

Na przykład, skracania , zbiór wszystkich liczb dziesiętnych trzycyfrowych otrzymuje się . Zbiór wszystkich liczb dziesiętnych dowolnej długości jest przykładem języka nieskończonej.

Alfabet sznurku

Alfabet ciąg jest zbiorem wszystkich znaków, które występują w danym ciągu znaków. Jeśli s jest ciągiem znaków, jego alfabet oznaczamy

Alfabet języka to zbiór wszystkich znaków, które występują w dowolny ciąg , formalnie: .

Na przykład, zestaw jest alfabet napisu , a powyżej jest alfabet z powyższym języku , jak również języka wszystkich liczb dziesiętnych.

substytucja String

Niech L będzie językiem , niech Σ być jego alfabet. Substytucji ciąg lub po prostu podstawienie jest odwzorowaniem f który odwzorowuje znaki Ď języków (ewentualnie w innym alfabecie). Tak więc, na przykład, biorąc pod uwagę charakter ∈ Σ, trzeba F ( ) = L a, gdzie L ⊆ Δ * jest część języka, którego alfabet jest Δ. To odwzorowanie może zostać przedłużony do strun jak

F (ε) = ε

na pusty ciąg ε i

F ( SA ) = f ( a ) F ( )

STRING sL i charakteru ∈ Ď. Podstawienia łańcuch może zostać przedłużony do całych językach,

Języki regularne są zamknięte pod substytucji strun. Oznacza to, że jeśli każdy znak w alfabecie języka regularnego jest podstawiona przez inny język regularny, wynik jest jeszcze język regularny. Podobnie bezkontekstowych języki są zamknięte pod podstawienia łańcuchów.

Prostym przykładem jest konwersja F UC duże litery, które mogą być określone na przykład w następujący sposób ().:

postać odwzorowane na języku uwaga
x f UC ( x )
< > {< >} map małą char do odpowiednich wielką char
< > {< >} map wielką char do siebie
< SS > {< SS >} nie wielkie char dostępnych map do dwóch char ciąg
<0> {Ε} mapa cyfra pusty ciąg
<!> {} zabronić interpunkcyjnych, mapę do pustej języku
... Podobny do innych znaków

Dla przedłużenia f uc do strun, mamy np

  • f UC (<Str>) = {<S>} ⋅ {<t>} ⋅ {<R>} ⋅ {A-} ⋅ {<SS>} ⋅ {<e>} = {<STRASSE>},
  • f UC (<U2>) = {<U>} ⋅ {ε} = {<U>} i
  • f UC (<wartych>) = {<G>} ⋅ {<o>} ⋅ {} = {}.

Dla przedłużenia f uc do języków, mamy np

  • f UC ({<Str> <U2> <wartych>}) = {<STRASSE>} ∪ {<U>} ∪ {} = {<STRASSE> <U>}.

homomorfizm String

Homomorfizm ciąg (często określane po prostu jako homomorfizmu w teorii języków formalnych ) jest substytucja ciąg taki, że każdy znak jest zastąpione jednym ciągiem. Oznacza to, że , gdzie jest ciągiem znaków, dla każdego znaku .

Homomorfizmy String są monoid morfizmami na wolnym monoid , zachowując pusty ciąg i binarne operację z łańcuchów znaków . Biorąc pod uwagę język , zestaw nazywa się homomorphic obraz z . Odwrotny homomorphic obraz z ciąg jest zdefiniowany jako

natomiast odwrotna homomorphic obraz języka jest zdefiniowana jako

Na ogół , gdy jeden ma

i

na dowolny język .

Klasa języków regularnych jest zamknięta pod homomorfizmów i odwrotnych homomorfizmów. Podobnie języków bezkontekstowych są zamknięte pod homomorfizmów i odwrotnych homomorfizmów.

Homomorfizmem ciąg mówi się ε-free (lub e-free), jeśli dla wszystkich w alfabecie . Proste pojedynczej nas szyfry podstawienia są przykładami (e-free) homomorfizmów smyczkowych.

Przykład ciąg homomorfizm g UC można również uzyskać przez określenie podobny do powyżej podstawień: G UC (<a>) = a, ..., g UC (<0>) = ε, lecz pozwalając g UC niezdefiniowane znaków interpunkcyjnych na. Przykłady obrazów są odwrotne homomorphic

  • g UC -1 ({<SSS>}) = {<SSS> <SSS> <SSS>}, ponieważ g UC (<SSS>) = g UC (<SSS>) = g UC (<SSS>) = <SSS> i
  • g UC -1 ({a, <bb>}) = {Ra} ponieważ g UC (Ra) = a, natomiast <bb> nie można uzyskać poprzez g uc .

Na drugim języku g UC ( g UC -1 ({a, <bb>})) = g UC ({Ra}) = {A-} ≠ {a, <bb>} , Homomorfizm g UC nie jest ε-wolny, ponieważ odwzorowuje to np <0>, aby ε.

Bardzo prosty przykład ciąg homomorfizm że odwzorowuje każdy znak tylko charakter jest konwersja EBCDIC kodowanego ciągu do ASCII .

projekcja String

Jeśli s jest ciągiem znaków, i jest alfabetu, projekcja ciąg od s jest ciąg znaków, który powoduje, usuwając wszystkie znaki, które nie są . Jest napisane jak . To jest formalnie zdefiniowany przez usunięcie znaków z prawej strony:

Tutaj oznacza ciąg pusty . Projekcja łańcucha jest w zasadzie taka sama, jak występ w relacyjnej Algebra .

Projekcja ciąg może być promowany do projekcji języka . Biorąc pod uwagę język formalny L , jego występ jest dana przez

prawo iloraz

Prawy iloraz charakter A z ciągiem s jest obcięcie znaku A w łańcuchu s , z prawej strony. Jest on oznaczony jako . Jeżeli łańcuch nie posiada na prawej stronie, wynikiem jest pusty łańcuch. A zatem:

Iloraz ciągu pustego można podjąć:

Podobnie, ponieważ podzestaw z monoid , można określić jako iloraz podzbiór

Left ilorazy mogą być definiowane podobnie, ze operacje odbywają się po lewej stronie napisu.

Hopcroft i Ullmana (1979) określa iloraz l 1 / L 2 języków L 1 i L 2 w tym samym alfabet jak l 1 / L 2 = { y | ∃ tL 2 . stL 1 }. Nie jest to uogólnienie powyższej definicji, gdyż na łańcuch a i różne postacie , b , definicja Hopcroft 'a Ullman implikuje { sa } / { b } uginając {}, zamiast {ε}.

W lewej iloraz (gdy zdefiniowane podobnie do Hopcroft i Ullmana 1979) języka pojedyncza L 1 i dowolnym języku L 2 jest znany jako Brzozowski pochodnej ; Jeśli L 2 jest reprezentowany przez wyrażenie regularne , dzięki czemu mogą być lewy iloraz.

składniowym relacja

Prawo iloraz podzbioru z monoid określa stosunek równoważności , zwany prawo składniowym związek o S . Jest podawany przez

Relacja jest jasno indeksu skończonych (ma skończoną liczbę klas równoważności) wtedy i tylko wtedy, gdy rodzina prawy ilorazy jest skończony; to znaczy, jeśli

jest skończona. W przypadku, gdy M jest monoid słów nad pewnym alfabetem, S jest wtedy język regularny , to jest język, który może zostać uznany przez automat skończony państwowej . Jest to omówione bardziej szczegółowo w artykule o składniowych monoids .

prawo anulowania

Prawo anulowania charakter A z ciągiem s jest usunięcie pierwszego wystąpienia znaku A w łańcuchu s , zaczynając od prawej strony. Jest on oznaczony jako jest rekursywnie zdefiniowany jako

Pusty ciąg jest zawsze odwoływalny:

Oczywiście, tak anulowanie i występ dojazdy :

prefiksy

Te prefiksy ciąg jest zbiorem wszystkich prefiksów do łańcucha, w odniesieniu do danego języka:

gdzie .

Zamknięcie przedrostek języka jest

Przykład:

Język nazywa prefiks zamknięte jeśli .

Operator zamknięcie prefiks idempotent :

Relacja prefiks jest binarna relacja taka, że wtedy i tylko wtedy . Zależność ta jest szczególnym przykładem celu prefiksu .

Zobacz też

Uwagi

Referencje

  • Hopcroft, John E .; Ullman Jeffrey D. (1979). Wprowadzenie do teorii automatów, języków i obliczeń . Reading, Massachusetts: Addison-Wesley Publishing. ISBN  0-201-02988-X . ZBL  0426.68001 . (Patrz rozdział 3)