Что анализирует в терминах, которые понял бы новый программист? [закрытый]

Я - студент колледжа, получающий мою степень Информатики. Много моих сокурсников действительно не сделало большого программирования. Они сделали свои присвоения класса, но давайте будем честны здесь, те вопросы действительно не учат Вас, как программировать.

У меня было несколько других студентов, задают мне вопросы о том, как проанализировать вещи, и я никогда не совершенно уверен, как объяснить это им. Лучше начать просто идти, линию за линией ища подстроки, или просто читать им более сложную лекцию об использовании надлежащего лексического анализа, и т.д. создавать маркеры, использовать BNF и весь тот другой материал? Они никогда вполне понимают это, когда я пытаюсь объяснить это.

Что лучший подход должен объяснить это, не путая их или препятствуя им от фактической попытки.

60
задан Community 14 November 2017 в 05:30
поделиться

5 ответов

Я бы объяснил синтаксический анализ как процесс преобразования одних данных в данные другого типа.

На практике для меня это почти всегда превращение строки или двоичных данных в структуру данных внутри моей Программы.

Например, превращение

":Nick!User@Host PRIVMSG #channel :Hello!"

в (C)

struct irc_line {
    char *nick;
    char *user;
    char *host;
    char *command;
    char **arguments;
    char *message;
} sample = { "Nick", "User", "Host", "PRIVMSG", { "#channel" }, "Hello!" }
68
ответ дан 24 November 2019 в 17:39
поделиться

Анализ - это ЧТЕНИЕ данных в одном формате, чтобы вы могли использовать их по своему усмотрению.

Я думаю, вам нужно научить их так думать. Итак, это самый простой способ объяснить синтаксический анализ для тех, кто плохо знаком с этой концепцией.

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

Мы называем полем все минимальные неделимые данные. Имя - это поле, Возраст - это другое поле, а Фамилия - это другое поле. Например.

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

Например: Путем разделения полей запятой

Пол, 20, Джонс

Или пробелом (Имя может состоять максимум из 20 букв, возраст до 3 цифр, Джонс до 20 букв)

Пол 020 Джонс

Любой из перед набором полей называется записью.

Чтобы разделить записи поля с разделителями, нам необходимо разделить записи. Достаточно точки (хотя вы знаете, что можете применить CR / LF).

Список может быть таким:

Майкл, 39, Джордан Шакил, 40, О'Нил.Леброн, 24, Джеймс.

или с CR / LF

Майкл, 39, Джордан
Шакил, 40 лет, О'Нил
Леброн, 24, Джеймс

Вы можете сказать им, чтобы перечислить 10 игроков, которые им нравятся. Затем они должны ввести их в соответствии с форматом. Затем создайте программу для ее анализа и отображения каждой записи. Одна группа может составлять список в формате, разделенном запятыми, и программу для анализа списка в формате фиксированного размера, и наоборот.

3
ответ дан 24 November 2019 в 17:39
поделиться

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

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

alt text
(источник: wikimedia.org )

Если бы я дал вам предложение на английском языке и попросил вас разбить предложение на части речи (существительные, глаголы и т. Д.), Вы будет разбирать предложение.

Это самое простое объяснение синтаксического анализа, которое я могу придумать.

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

33
ответ дан 24 November 2019 в 17:39
поделиться

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

5
ответ дан 24 November 2019 в 17:39
поделиться

Что такое синтаксический анализ?

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

Например, предположим, что язык a ^ nb ^ n (что означает такое же количество символов, за которыми следует на такое же количество символов B). Синтаксический анализатор для этого языка примет ввод AABB и отклонит ввод AAAB . Это то, что делает синтаксический анализатор.

Кроме того, во время В этом процессе может быть создана структура данных для дальнейшей обработки. В моем предыдущем примере она могла, например, хранить AA и BB в двух отдельных е стеки.

Все, что происходит после этого, например, придание значения AA или BB , или преобразование их во что-то еще, не является синтаксическим анализом. Придание значения частям входной последовательности токенов называется семантическим анализом .

Что не является синтаксическим анализом?

  • Синтаксический анализ не превращает одно в другое. Преобразование A в B, по сути, то, что делает компилятор . Компиляция занимает несколько шагов, синтаксический анализ - только один из них.
  • Синтаксический анализ - это не извлечение смысла из текста. Извлечь значение из текста - это семантический анализ , который является этапом процесса компиляции.

Каков самый простой способ понять это?

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

Это очень просто, у вас есть вход, набор состояний и набор переходов. Рассмотрим следующий язык, построенный на алфавите {A, B} , L = {w | w начинается с «AA» или «BB» в качестве подстроки} . Автомат ниже представляет возможный синтаксический анализатор для этого языка, все допустимые слова которого начинаются с «AA» или «BB».

    A-->(q1)--A-->(qf)
   /  
 (q0)    
   \          
    B-->(q2)--B-->(qf)

Это очень простой синтаксический анализатор для этого языка.Вы начинаете с (q0) , начальное состояние, затем вы читаете символ со входа, если это A , тогда вы переходите в состояние (q1) , в противном случае (это B , помните, что алфавит только A и B ) вы переходите в состояние (q2) и так далее. Если вы достигли состояния (qf) , то ввод был принят.

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

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

22
ответ дан 24 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

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