Що таке семантика мови програмування?


9

У главі 1 « Практичні основи мов програмування» автор зазначає, що абстрактні синтаксичні дерева асоціюються з різновидами .

Інтуїтивно зрозумілі види - це типи, але я хотів би знати, чи мають вони точне визначення. Буду радий, якщо також будуть надані деякі довідки.

Відповіді:


4

Це залежить від того, яку семантику ми взяли б за типи та сорти. - Однак коротке - мало неформальних - може бути визначення - Сортування - це класи AST, а типи - класи значень .


4

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

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

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

У універсальних алгебрах це вдосконалюється введенням рівнянь, що визначають рівнозначність між термінами.

Хоча це, здається, трохи згасло, ці поняття були досить популярними і багато вивчалися в інформатиці наприкінці 20 століття, як абстрактні алгебри, де потім розглядаються як основа для абстрактних типів даних, що, частково, є попередником того, що є носить класи в об'єктно-орієнтованому програмуванні.

Універсальні алгебри пов'язані з розвитком теорії категорій, яка також є основоположною в сучасному баченні типів і мов програмування.

Алгебри є синтаксичним об'єктом і призначені для використання з інтерпретацією в деякій смисловій області (іх), що відповідає типам. Інтерпретація - це гомоморфізм, який відображає сортування в області значень (типів) , а оператори - на функції між цими доменами, так що підписи дотримуються, а рівняння теж у випадку рівняльної алгебри. Ось так ви можете застосувати результати теорії груп до будь-якої галузі в рамках операції, що відповідає визначенню групи.

Ранні дослідники мов програмування цю організацію вважали дуже зручною, особливо тих, хто стосується формалізації мов програмування. Він мав перевагу у виділенні синтаксису та семантики та в математичному розумінні.

Ще однією причиною його прийняття була стурбованість розробкою інструменту для маніпулювання програмами, або в середовищі розробки, або в офіційних системах для доведення властивостей програм (які виявилися все більше і більше проблем-близнюків).

Це призводить до появи концепції мови абстрактного синтаксису (AST) для мов програмування, які, по суті, є термінами різнорідної алгебри (іноді уточненої із застосуванням об'єднання сортування в деяких системах). AST - це опорний синтаксис мови, з якого семантику можна визначити за гомоморфізмом, як у денотаційній семантиці.

Це не тільки зручно для вивчення семантики мов, але дерева - це краще структуровані рядки thans і, таким чином, краща основа для розробки засобів програмування та середовищ програмування.

Це дозволяє виділити синтаксичний аналіз, який традиційно був безладним, оскільки обмеження технології розбору змусили використовувати спотворені граматики. Він також визначає питання презентації.

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

Це дозволяє легко визначити багато інтерпретацій програм і їхніх видів , щоб проаналізувати продуктові програми з абстрактними інтерпретаціями.

Це зручно для написання (напів-) автоматизованих інструментів маніпулювання програмою, наприклад, для автоматичних перетворень програм або перекладів між мовами.

На практиці речі іноді можуть бути дещо складнішими, оскільки деякі форми абстрактного синтаксису дозволяють деяким операторам купувати дерева (вирази), що належать до декількох видів (неформальний спосіб їх перегляду). Наприклад, може бути сортування для синтаксичних конструкцій, які представляють змінні (присвоювані об'єкти), та інше для виразів. Але будь-яка змінна може бути використана як вираз, зворотне - хибне.

Ранні статті про це для мов програмування датуються серединою сімдесятих. У той час концептуалізація була призначена для створення синтаксичного свідомого (тоді слово "спрямоване" використовувалося) програмного середовища. Шукайте Наставника та Кентавра в Європі та Корнельського програмного синтезатора в США. Вони були першими двома системами, які фактично використовували такі поняття на практичному шляху. Багато інших були розроблені згодом.

Але абстрактний синтаксис передує цим системам. Мова Lisp (1958) мала абстрактний синтаксис, що не дивно, оскільки він був розроблений логіком, і для того, щоб зробити програми, що маніпулюють програмами (див. Також ML та LCF ..., що з'явилися пізніше). Але Лісп не був відсортований: все було синтаксично списком і більш досконала структура, по суті, залежала від семантики. Це змушує деяких людей вважати, дещо неправильно, що у Ліспа не було синтаксису.


Скажіть, є дві різні ієрархії, одна в землі синтаксису, а інша в землі семантики. У синтаксисі у нас є як ASTs, так і класи та сорти. У семантиці у нас є значення, типи, види ... і т. Д. Чи не існують мови, які об'єднують обидва в одне середовище розробки, як Twelf чи Coq?
CMCDragonkai

@CMCDragonkai Я б сказав (забороняючи можливі помилки) саме те, що я сказав. Я б не називав ці ієрархії, а скоріше сферами (мета-) дискурсу. Синтаксично-семантична відокремленість відрізняє те, про що ми говоримо, і як ми це робимо, що вимагає представлення. Вам не слід змішувати синтаксис і семантику однієї мови, але синтаксис однієї мови може бути об’єктом дискурсу, отже, належати до семантики іншої мови. У цьому сенсі ви можете побачити певне об'єднання, з яким потрібно обережно поводитися. Синтаксис завжди генерується кінцево, тоді як семантика не має такого обмеження.
babou

2

У четвертій главі виявляється, що сорти для синтаксису, а типи - для семантики.

На прикладі діаграми синтаксису на сторінці 40 розглядається сортування мовою L {num str}. Мабуть, сортування - це категорії в синтаксисі мови.

Зокрема, "плюс" має сорт, який є синтаксичною категорією його результату. Сорт оператора "плюс" називається "Exp". Це означає, що синтаксично виклик оператора "плюс" є виразом. Викликання оператора "плюс" може заповнити позицію в абстрактному синтаксичному дереві, де дозволено вираз. Ось яка конструкція є «плюсом». Ось так воно вписується в структуру тексту, який представляє програму.

Система типів на сторінці 41 стосується типів мовою L {num str}. Тип оператора "плюс", враховуючи, що його операнди мають тип "num", це "num". Це судження є частковим описом семантики оператора "плюс". Тобто, частина значення оператора "плюс" - це поєднання двох чисел для отримання числа. Це значення відрізняє "плюс" від інших виразів.

Крім того, існує різновид з назвою "Typ", який містить два типи "num" і "str".


1
Ну, він використовує це в цій концепції, але він не визначає це чітко. Я знайшов термін "багатосортна логіка", який мені здається, що види і типи є дійсно закритими пов'язаними поняттями. Я просто хотів знати чітке визначення для обох.
rslima

Це щось стосується "систем чистого типу". Я підозрюю, що ми могли б вважати презентацію в " Ламбда-калькуляції з типами " звичайною. Але це не стисло. Я ще не знайшов посилання, яке б дало чіткі, стислі визначення поняття, типу, виду та роду.
мінопрет

Що з виробничими головами в аналізаторі? Багато разів ви класифікуєте граматики під такими назвами, як Expression або Type.
CMCDragonkai

1

На початку глави 1 Гарпер дає підказку, що він має на увазі під словом сортування :

Синтаксис мови визначає засоби, за допомогою яких можуть утворюватися різноманітні фрази (вирази, команди, декларації тощо) для формування програм.

Він визначає словосполучення як абстрактне синтаксичне дерево, яке він потім обговорює.


Мені здається, ніби "сорти" використовувались зі своїм звичайним тут англійським значенням, синонімом "видам".
Рафаель

@Raphael Так, але здається, що це значення відповідає останньому офіційному використанню, чи не погоджуєтесь ви?
jcora

Не зовсім. Словосполучення «цей тип X» може з’являтися часто в книзі; це речення жодним чином не сигналізує про те, що щось визначається. (Також цей уривок не відповідає тому, наскільки я розумію термін "сортувати").
Рафаель

@Raphael Добре, будь ласка, поясніть, наскільки це конкретне використання є непослідовним, воно, безумовно, інформує мене, тому що я зараз це розумію.
jcora

Поняття "сортування", яке я знаю, пов'язане з окремими вузлами AST, а не цілим деревом (саме те, що ви говорите "фраза" означає у своєму джерелі).
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.