Что такое семантика языка программирования?


9

В главе 1 « Практических основ языков программирования» автор упоминает, что абстрактные синтаксические деревья связаны с сортировками .

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

Ответы:


4

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


4

На самом деле существует много общего между сортировками для синтаксиса и типов, как обычно понимают. Но сортировки являются формальной синтаксической концепцией , а деревья AS также являются синтаксисом, а типы - семантической концепцией .

Терминология происходит от термина алгебры (также называемые свободными алгебрами ) и универсальной алгебры . Это, по сути, синтаксические теории алгебраических структур, которые анализируются независимо от каких-либо интерпретаций. Они были разработаны в первой половине 20-го века.

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

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

Хотя кажется, что они немного поблекли, эти концепции были довольно популярны и широко изучались в компьютерных науках в конце 20-го века как абстрактные алгебры, которые затем рассматривались как основа для абстрактных типов данных, что отчасти является предшественником того, что nos классы в объектно-ориентированном программировании.

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

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

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

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

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

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

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

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

Это позволяет легко определять многие интерпретации программ и их разновидности для анализа свойств программ с помощью абстрактных интерпретаций.

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

Иногда на практике все может быть немного сложнее, потому что некоторые формы абстрактного синтаксиса позволяют некоторым операторам создавать деревья (выражения), принадлежащие к нескольким видам (неформальный взгляд на это). Например, может быть сортировка для синтаксических конструкций, которые представляют переменные (присваиваемые сущности), и другая для выражений. Но любая переменная может быть использована в качестве выражения, обратное значение равно false.

Первые статьи об этом для языков программирования датируются серединой семидесятых. Концептуализация в то время предназначалась для создания синтаксически-ориентированных (затем использовалось слово «направленный») сред программирования. Ищите наставника и кентавра в Европе и синтезатор программ Корнелла в США. Они были первыми двумя системами, которые фактически использовали такие концепции на практике. Многие другие были разработаны впоследствии.

Но абстрактный синтаксис предшествует этим системам. Язык Lisp (1958) имел абстрактный синтаксис, что неудивительно, так как он был разработан логиком, и с целью создания программ, которые манипулируют программами (см. Также ML и LCF ..., которые появились позже). Но Лисп не был отсортирован: все было синтаксически списком, а более утонченная структура была существенно зависима от семантики. Это приводит к тому, что некоторые люди ошибочно полагают, что в Лиспе нет синтаксиса.


Можете ли вы сказать, что есть две разные иерархии, одна в синтаксической земле, а другая в семантике земли. В синтаксисе мы имеем как вы ASTs и сортировки и классы сортировок. В семантике у нас есть значения, типы, виды ... и т.д. Разве нет языков, которые объединяют оба в одну среду разработки, такую ​​как Twelf или Coq?
CMCDragonkai

@CMCDragonkai Я бы сказал (за исключением возможных ошибок) именно то, что я сказал. Я бы не назвал эти иерархии, а скорее области (мета-) дискурса. Разделение синтаксиса и семантики различает то, о чем мы говорим и как мы это делаем, что требует представления. Вам не следует смешивать синтаксис и семантику одного и того же языка, но синтаксис одного языка может быть объектом дискурса и, следовательно, принадлежать семантике другого языка. В этом смысле вы можете увидеть некоторое объединение, с которым нужно обращаться осторожно. Синтаксис всегда конечно генерируется, в то время как семантика не имеет такого ограничения.
Бабу

2

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

Пример синтаксической диаграммы на стр. 40 касается сортировок на языке L {num str}. Видимо, сортировки - это категории в синтаксисе языка.

В частности, «плюс» имеет вид, который является синтаксической категорией его результата. Сорт оператора «плюс» называется «Exp». Это говорит о том, что синтаксически вызов оператора «плюс» является выражением. Вызов оператора «плюс» может заполнить позицию в абстрактном синтаксическом дереве, где разрешено выражение. Вот что такое конструкция "плюс". Вот как это вписывается в структуру текста, который представляет программу.

Система типов на стр. 41 имеет дело с типами в языке L {num str}. Тип оператора «плюс», учитывая, что его операнды имеют тип «num», является «num». Это суждение является частичным описанием семантики оператора «плюс». То есть частью значения оператора «плюс» является объединение двух чисел для получения числа. Это значение отличает «плюс» от других выражений.

Кроме того, существует тип с именем «Typ», который содержит два типа: «num» и «str».


1
Ну, он использует это в этой концепции, но он не определяет это четко. Я нашел термин «многосортная логика», который мне кажется, что сорта и типы - это действительно замкнутые понятия. Я просто хотел знать четкое определение для обоих.
rslima

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

Как насчет производственных головок в парсере? Много раз вы заканчиваете тем, что классифицировали грамматики под подобными именами как Выражение или Тип.
CMCDragonkai

1

В начале главы 1 Харпер дает подсказку о том, что он подразумевает под словом сортировка :

Синтаксис языка определяет средства, с помощью которых различные виды фраз (выражения, команды, объявления и т. Д.) Могут комбинироваться для формирования программ.

Он определяет словосочетание как абстрактное синтаксическое дерево, которое он затем обсуждает.


Мне кажется, что «сортировки» использовались здесь с обычным английским значением, синонимичным «видам».
Рафаэль

@ Рафаэль Да, но кажется, что это значение согласуется с последним формальным использованием, вы не согласны?
Jcora

Не совсем. Фраза «этот вид X» может часто появляться в книге; это предложение никоим образом не указывает на то, что что-то определяется. (Также этот отрывок не соответствует тому, как я понимаю термин «сортировка»).
Рафаэль

@ Рафаэль Хорошо, пожалуйста, объясните, как это конкретное использование противоречиво, оно наверняка сообщит мне, потому что я так понимаю в настоящее время.
Jcora

Понятие «сортировка», которое я знаю, связано с отдельными узлами AST, а не с целым деревом (что, как вы говорите, «фраза» означает в вашем источнике).
Рафаэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.