Каково использование конечных автоматов? [закрытый]

В Linux/UNIX можно использовать POSIX dlopen / dlsym / dlerror / dlclose функции для динамичного открытия совместно использованных библиотек, и получить доступ к символам (включая функции) они обеспечивают, видят страница справочника для деталей.

10
задан Peter Mortensen 17 December 2010 в 20:07
поделиться

8 ответов

Это теоретические основы концепций, широко используемых в информатике и программировании, и их понимание поможет вам лучше понять, как их использовать (и каковы их пределы). Вы должны столкнуться с тремя основными из них, в порядке возрастания степени:

  • Конечные автоматы, которые эквивалентны регулярным выражениям. Регулярные выражения широко используются в программировании для сопоставления строк и извлечения текста. Это простой метод описания набора допустимых строк с использованием основных символов, группировки и повторения. Они могут многое, но они не могут сопоставить сбалансированные наборы круглых скобок.
  • Выпадающие автоматы, эквивалент контекстно-свободных грамматик. Парсеры и компиляторы текста / ввода используют их, когда не используются регулярные выражения. t достаточно мощный (и одна из вещей, которую вы узнаете при изучении конечных автоматов, - это то, что регулярные выражения делать не могут, что имеет решающее значение для понимания, когда писать регулярное выражение, а когда использовать что-то более сложное). Грамматики без контекста могут описывать «языки» (наборы допустимых строк), где достоверность в определенный момент при синтаксическом анализе строки не зависит от того, что еще было замечено.
  • Машины Тьюринга, эквивалентные общему вычислению (все, что вы можете делать с компом). Некоторые вещи, которые вы узнаете, когда будете рассматривать их, позволят вам понять пределы самих вычислений. Хороший курс теории научит вас проблеме остановки, что позволит вам определить проблемы, для которых невозможно написать программу. Как только вы определили такую ​​проблему, тогда вы знаете, что нужно прекратить попытки (или усовершенствовать это до чего-то, что возможно).

Понимание теории и ограничений этих различных вычислительных механизмов позволит вам лучше понять проблемы и программы и глубже задуматься о программировании.

Это было запрос о работе, опубликованный около года назад на одном из сайтов по обмену внештатными программистами, в котором, по сути, был запрос на программу, которая решила бы проблему остановки. Несколько человек ответили предложениями, сказав, что «понимают требования» и могут «начать немедленно». Невозможно было написать программу, отвечающую требованиям. Понимание теории вычислений позволяет вам не быть тем участником торгов, который публично демонстрирует, что он действительно не разбирается в вычислениях (и не понимает)

27
ответ дан 3 December 2019 в 13:56
поделиться

Конечные автоматы очень полезны для протоколов связи и для сопоставления строк с регулярными выражениями.

4
ответ дан 3 December 2019 в 13:56
поделиться

Автоматы используются в аппаратных и программных приложениях. Пожалуйста, прочтите раздел реализации здесь http://en.wikipedia.org/wiki/Finite-state_machine#Implementation

Также существует понятие программирования на основе автоматов. Пожалуйста, проверьте это http://en.wikipedia.org/wiki/Automata-based_programming

ура

2
ответ дан 3 December 2019 в 13:56
поделиться

Конечные автоматы, например, используются для синтаксического анализа формальных языков. Это означает, что конечные автоматы очень полезны при создании методов компилятора и интерпретатора.

Исторически конечный автомат показал, что многие проблемы могут быть решены с помощью очень простого автомата.

2
ответ дан 3 December 2019 в 13:56
поделиться

Попробуйте пройти курс компиляторов. Скорее всего, вы создадите компилятор или интерпретатор, использующий конечный автомат для реализации синтаксического анализатора рекурсивного спуска.

1
ответ дан 3 December 2019 в 13:56
поделиться

Каждый графический интерфейс, каждый рабочий процесс можно рассматривать как конечный автомат. Думайте о каждой странице как о состоянии и переходах, происходящих из-за определенных событий. Возможно, вы не сможете перейти к определенной странице или следующему этапу рабочего процесса, пока не будет выполнен ряд условий.

1
ответ дан 3 December 2019 в 13:56
поделиться

Например, для управления состояниями некоторых объектов с определенным жизненным циклом. Как пример: заказы в книжном магазине. Заказ может иметь следующие состояния: -приказал -оплаченный -Перевозка -done

и программа конечных автоматов знает, как одно состояние может быть изменено другим.

1
ответ дан 3 December 2019 в 13:56
поделиться

Конечный автомат - это тип конечного автомата (SM). Обычно SM используются для синтаксического анализа формальных языков .

Вы можете использовать в качестве формального языка многие объекты, а не только символы.

А обычный язык - это тип формального языка. Существуют теории, показывающие, какой тип SM лучше разбирать на обычном языке: http://en.wikipedia.org/wiki/Regular_language

1
ответ дан 3 December 2019 в 13:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: