W wielu artykułach dotyczących gramatyk bezkontekstowych (CFG), przykłady takich gramatyk tam często dopuszczają łatwą charakterystykę generowanego języka. Na przykład:
S →
generuje ,
S → a a S b S →
generuje i
S → b S b S →
generuje lub równoważnie (gdzie odnosi się do części uchwyconej przez ).
Powyższe przykłady można wygenerować, dodając indeksy ( ), proste ograniczenia tych indeksów ( ) i dopasowanie wzorca do wyrażeń regularnych. To sprawia, że zastanawiam się, czy wszystkie języki bezkontekstowe mogą być generowane przez jakieś rozszerzenie wyrażeń regularnych.
Czy istnieje rozszerzenie wyrażeń regularnych, które mogą generować cały lub jakiś znaczący podzbiór języków bezkontekstowych?
fl.formal-languages
context-free
context-free-languages
Alex ten Brink
źródło
źródło
Odpowiedzi:
Tak jest. Zdefiniuj wyrażenie bezkontekstowe jako termin generowany przez następującą gramatykę:
To wszystko konstruktory dla zwykłych języków oprócz gwiazdy Kleene, która jest zastąpiona przez ogólny operator stałoprzecinkowy oraz zmienny mechanizm odniesienia. (Gwiazda Kleene nie jest potrzebna, ponieważ można ją zdefiniować jako g ∗ ≜ μ α .μ α .sol .)sol∗ ≜ μ α .ϵ∨g⋅α
Interpretacja wyrażenia bezkontekstowego wymaga uwzględnienia interpretacji zmiennych swobodnych. Zdefiniuj więc środowisko jako mapę zmiennych do języków (tj. Podzbiorów Σ ∗ ) i pozwól [ ρ | α : L ] jest funkcją, która zachowuje się jak ρ na wszystkich wejściach oprócz α , i która zwraca język L dla α .ρ Σ∗ [ρ|α:L] ρ α L α
Teraz zdefiniuj interpretację wyrażenia bezkontekstowego w następujący sposób:
Korzystając z twierdzenia Knastera-Tarskiego, łatwo zauważyć, że interpretacja jest najmniej ustalonym wyrażeniem.μα.g
To proste (choć nie do końca trywialne), aby pokazać, że możesz podać wyrażenie bezkontekstowe, wywodzące się z tego samego języka, co każda gramatyka bezkontekstowa i odwrotnie. Nietrywialność wynika z faktu, że wyrażenia bezkontekstowe mają zagnieżdżone punkty stałe, a gramatyki bezkontekstowe dają jeden stały punkt nad krotką. Wymaga to użycia lematu Bekica, który mówi dokładnie, że zagnieżdżone punkty stałe można przekształcić w pojedynczy punkt stały nad produktem (i odwrotnie). Ale to jedyna subtelność.
EDYCJA: Nie, nie znam standardowego odniesienia do tego: opracowałem to dla własnego zainteresowania. Jednak jest to na tyle oczywista konstrukcja, że jestem pewien, że została wcześniej wynaleziona. Niektórzy przypadkowi Googling ujawniają niedawny artykuł Joosta Wintera, Marcello Bonsangue i Jana Ruttena Języki bezkontekstowe, Coalgebraically , w którym podają wariant tej definicji (wymagający zachowania wszystkich stałych punktów), które nazywają także wyrażeniami bezkontekstowymi.
źródło
Na MathOverflow pojawiło się ściśle powiązane pytanie (i kilka odpowiedzi) na temat języków, których funkcje generowania są holonomiczne .
źródło
Niedawno opublikowaliśmy zarys struktury, która to zrobi. Zajrzyj do comp.kompilatorów , gdzie wysłałem powiadomienie wraz z kilkoma linkami.
Nowe odkrycia działają na podstawie twierdzenia Chomsky'ego-Schuetzenbergera i można je uznać za uzupełnienie tego wyniku. Sam Chomsky został poinformowany o rozwoju sytuacji i wskazuje na chęć „nadrobienia zaległości”.
Wraz z tym rozwojem ustalamy również równoważność dwóch oddzielnych sformułowań dla wyrażeń bezkontekstowych - jednego, który jest rozszerzeniem / uzupełnieniem formy rachunku mu-najmniej „punktu stałego” (pierwotnie przez Gruska, Yntema i McWhirter) - który otrzymał ostateczną formułę w 2014 r. - a drugi opublikowano w 2008 r.
źródło