Что такое обычный язык?
Я пытаюсь понять концепцию уровней языков (обычный, контекстно-свободный, контекстно-зависимый и т. д.).
Я могу посмотреть это легко, но все объяснения, которые я нахожу, являются нагрузкой символов и говорят о наборы. У меня есть два вопроса:
можете ли вы описать словами, Что такое обычный язык, и как языки отличаются?
где люди учатся понимать этот материал? Насколько я понимаю, это так формальная математика? У меня было несколько курсов в универе, которые использовали его, и едва ли кто-то понимал его, поскольку преподаватели просто предполагали, что мы это знаем. Где я могу этому научиться и почему люди "должны" знать это во многих источниках? Это похоже на разрыв в образовании.
здесь пример:
любой язык, принадлежащий к этому набору, является обычным языком над алфавитом.
Как язык может быть "за" что-нибудь?
3 ответа:
в контексте информатики, a слово - это конкатенация символы. Используемые символы называются алфавит. Например, некоторые слова, образованные из алфавита
{0,1,2,3,4,5,6,7,8,9}
будет1
,2
,12
,543
,1000
и002
.A язык тогда подмножество всех возможных слов. Например, мы могли бы определить язык, который захватывает всех элитных агентов MI6. Все начните с double-0, чтобы слова в языке были
007
,001
,005
и0012
, но не07
или15
. Для простоты, мы говорим, что язык-это "over алфавит" вместо "подмножество слов, образованных конкатенацией символов на алфавит".в информатике мы теперь хотим классифицировать языки. Мы называем язык обычный если это можно решить, если слово находится в языке с алгоритм / машина с постоянной (конечной) памятью, исследуя все символы в слове один за другим. Язык, состоящий только из слова
42
является регулярным, так как вы можете решить, есть ли в нем слово, не требуя произвольного объема памяти; вы просто проверяете, является ли первый символ 4, является ли второй 2 и следуют ли еще какие-либо числа.все языки с конечным числом слов являются регулярными, потому что мы можем (теоретически) просто построить поток управления дерево постоянного размера (вы можете визуализировать его как кучу вложенных
if
-операторы, которые исследуют одну цифру за другой). Например, мы можем проверить, находится ли слово в языке" простые числа между 10 и 99 " со следующей конструкцией, не требующей памяти, кроме той, в которой кодируется строка кода, в которой мы сейчас находимся:if word[0] == 1: if word[1] == 1: # 11 return true # "accept" word, i.e. it's in the language if word[1] == 3: # 13 return true ... return false
обратите внимание, что все конечные языки являются регулярными, но не все регулярные языки конечны; наш язык double-0 содержит бесконечное число слов (
007
,008
, но и004242
и0012345
), но может быть проверена с постоянной памятью: чтобы проверить, принадлежит ли слово в нем, проверьте, является ли первый символ0
, и является ли второй символ0
. Если это так, примите это. Если слово короче трех или не начинается с00
, это не кодовое имя МИ-6.формально, конструкция a автомат или регулярные грамматики используется для доказывать, что язык является регулярным. Они похожи на
if
-утверждения выше, но допускают произвольно длинные слова. Если есть конечная машина, есть также регулярная грамматика, и наоборот, поэтому достаточно показать либо то, либо другое. Например, конечным автоматом для нашего языка double-0 является:start state: if input = 0 then goto state 2 start state: if input = 1 then fail start state: if input = 2 then fail ... state 2: if input = 0 then accept state 2: if input != 0 then fail accept: for any input, accept
эквивалентная регулярная грамматика:
start → 0 B B → 0 accept accept → 0 accept accept → 1 accept ...
в эквиваленте регулярные выражения - это:
00[0-9]*
некоторые языки - это не регулярный. Например, язык любого числа
1
, за которым следует такое же количество2
(часто пишется как 1n2n, для произвольного n) не является регулярным - вам нужно больше, чем постоянный объем памяти(= постоянное количество состояний) для хранения количества1
s, чтобы решить, является ли слово в языке.это обычно должно быть объяснено в теоретическом компьютере курс науки. К счастью, Википедия объясняет оба официальные и регулярные языки довольно красиво.
вот некоторые из эквивалентных определений от Википедия:
[...] регулярный язык является формальным языком (т. е., возможно бесконечное множество конечных последовательностей символов из конечного алфавита) это удовлетворяет следующим эквивалентным свойствам:
- он может быть принят детерминированным конечным автоматом.
- он может быть принят недетерминированным конечным автоматом
он может быть описан формальным регулярным выражением.
обратите внимание, что функции "регулярного выражения" поставляются со многими языками программирования дополнены функциями, которые делают их способными распознавать языки, которые не являются регулярными, и поэтому не являются строго эквивалентно формальным регулярным выражениям.
первое, что нужно отметить, это то, что обычный язык формальный язык, С ряд ограничений. Формальный язык-это по существу (возможно, бесконечный) набор строк. Например, формальный язык Java-это коллекция всех возможных файлов Java, которая является подмножеством коллекции всех возможных текстовых файлов.
одна из самых важных характеристик является то, что в отличие от контекстно-свободных языков, обычный язык не поддерживает произвольную вложенность / рекурсию, но у вас есть произвольное повторение.
язык всегда имеет базовый алфавит, который является набором разрешенных символов. Например, алфавит языка программирования обычно будет либо ASCII, либо Unicode, но в теории формального языка также хорошо говорить о языках над другими алфавитами, например двоичным алфавитом, где единственными разрешенными символами являются
0
и1
.в моем университете нам преподавали некоторую формальную теорию языка в классе компиляторов, но это, вероятно, отличается разные школы.
Я узнал, что от "введение в теорию вычислений", Майкл Sipser; Я нашел это очень полезным.
вот содержание:
- введение
- Часть 1: автоматы и языки
- 1. Регулярные Языки
- 2. Контекстно-Свободные Языки
- Часть 2: Теория Вычислимости
- 3. Церковь-Тьюринг Тезис
- 4. Разрешимость
- 5. Сводимость
- 6. Дополнительные темы В теории вычислимости
- Часть 3: Теория Сложности
- 7. Временная Сложность
- 8. Космическая Сложность
- 9. Несговорчивость
- 10. Продвинутые темы В теории сложности.