Целью синтаксического анализа является разбор строки символов на отдельные составляющие элементы согласно набору синтаксических правил.
Например, простую скобочную запись a(bc) можно представить как в виде a -> (b -> c), так и в виде двоичного дерева.
Рассмотрим простой случай разбора аппликативного выражения, записанного в виде бесскобочного выражения.
Создадим
datatype tree = Atom of string |
Comb of tree * tree
Примем за минимальную синтаксическую единицу один символ и будем считать, что строка представляет из себя последовательную аппликацию с ассоциацией влево ( f xyz ):
fun Parse [next] = Atom next |
Parse (next::rest) =
Comb(Atom next, Parse rest);
В результате выполнения процедуры синтаксического анализа
Parse["f", "x", "y", "z"]
получим
val it = Comb (Atom "f",Comb (Atom "x",
Comb (Atom "y",Atom "z"))) : tree
В аналогичном случае с ассоциацией вправо ситуация будет несколько сложнее.
Запишем основные правила для синтаксического разбора:
f преобразуется в Atom "f"f x преобразуется в Comb(Atom "f", Atom "x")f xy преобразуется в Comb(Comb(Atom "f", Atom "x"), Atom "y")Запись этих правил на SML будет выглядеть следующим образом:
fun Parser t[] = t |
Parser t (next::rest) =
Parser (Comb(t, Atom next)) rest;
fun Parse [next] = Atom next|
Parse (next::rest) =
Parser (Atom next) rest;
Parse["f", "x", "y", "z"];
Сформулируйте формальную постановку задачи, запишите правила вывода и реализуйте программу на SML в соответствии с вариантом исполнения. В качестве целевого типа взять бинарное дерево вида:
tree = Nil | Atom of string |
Comb of tree * tree;
Реализовать функцию на языке программирования SML, которая выполняет синтаксический разбор следующего аппликативного выражения по ассоциации влево с построением бинарного дерева:
a(bc)(ac)(bc)(ab)(c(de))a(b(cd)(ef))a(b(cd)(ef)g)a(b((cd)(ef))(a(bc(de)f)gh)abb(cdd(e)fg)(ab(c(de))f(g(hi))j)Реализовать функцию на языке программирования SML, которая выполняет синтаксический разбор следующего аппликативного выражения по ассоциации вправо с построением бинарного дерева:
a(bc)ac(bc)(ac)(bc)a(b(cd)(ef))a(b(cd)(ef)g)a(b((cd)(ef))(a(bc(de)f)gh)abb(cdd(e)fg)(ab(c(de))f(g(hi))j)Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.