Nie jestem pewien, czy w teorii komputerowej używa się zwrotów „nieskończony” język lub „skończony” język.
Myślę, że źródłem problemu jest to, że język taki jak jest nieskończony w tym sensie, że może wygenerować nieskończoną (ale policzalną) liczbę łańcuchów. Jednak nadal może być rozpoznany przez automat skończony.L = { a b }∗
Inną kwestią jest to, że formalna teoria języka jest dość osobliwa w tym, jak używa terminu „język”.
Dla każdego na tym świecie, z wyjątkiem osób posiadających formalną teorię języka, język jest systemem wypowiedzi używanych do komunikacji, więc każda wypowiedź ma formę (swoją składnię ) i jakieś znaczenie ( semantykę ). Formalna teoria języka, przynajmniej część wykorzystywana w informatyce, poświęcona jest problemowi, jak najlepiej formalnie zdefiniować składnię języków. Chodzi przede wszystkim o związek między składnią języków (jak wyglądają wypowiedzi) a formalizmami (językami!), Takimi jak wyrażenia regularne używane do definiowania składni języków.
Dlatego w formalnej teorii języka „język” definiuje się po prostu jako „zbiór ciągów znaków”. Zazwyczaj nie przypisuje znaczenia ciągom w języku.
Jednocześnie formalizacje używane do opisu języków, takie jak wyrażenia regularne, również tworzą języki w tym sensie: na przykład każde wyrażenie regularne jest ciągiem znaków, a zatem zbiór wyrażeń regularnych jest językiem. Jednak dla tych formalizmów, komunikaty w języku zrób mają znaczenie: na przykład, znaczenie każdego wyrażenia regularnego jest językiem to oznacza.
a b{ a b }a ba b{ a b }
{ab}∗. The operator ∗ denotes a function that maps languages to languages: it maps each language L to the language consisting of all strings that consist of a string in L zero or more times repeated. If L is the empty language, the result is L; in all other cases, the result is an infinite language. For instance, {ab}∗ is the language {ϵ,ab,abab,ababab,abababab,…}. It is infinite, but using the operator ∗, we can describe it in a finite way, as {ab}∗.
Furthermore, we can use a regular expression to describe this language, namely (ab)∗. Like all regular expressions, this is a finite string, but like most regular expressions that contain the ∗ operator, it describes an infinite language.
Whenever a text on formal languages uses an expression such as (ab)∗ that denotes a language, ask yourself whether it is discussing the regular expression itself (e.g. how it is constructed, which language it denotes, etc.) or whether it merely uses the regular expression to refer to the language being denoted.
ab*
(gwiazda Kleene) oznacza, że możesz mieć zero lub więcej kombinacji łańcuchaab
, w tym potencjalną nieskończoną liczbę łańcuchów: {"", ab ^ 1, ab ^ 2, ab ^ 3, ... ., ab ^ n}. Możesz jednak nadal zbudować FSM, który rozpoznaje ten język, ponieważ w rzeczywistości nie ma możliwości wygenerowania nieskończonego ciągu, gdy przetwarzane przez maszynę wszystkie ciągi muszą być skończone, ale to nie czyni samego języka skończonym. Języki nieskończoności są teoretyczne.