Відповіді:
Насправді існує багато подібності між видами для синтаксису абстрактів і типами, як зазвичай розуміють. Але сорти - це формальне синтаксичне поняття , і дерева AS є синтаксисом, а типи - семантичним поняттям .
Термінологія походить від терміна алгебри (їх також називають вільними алгебрами ) та універсальної алгебри . Це по суті синтаксичні теорії алгебраїчних структур, проаналізовані незалежно від будь-яких інтерпретацій. Вони були розроблені в першій половині 20 століття.
Термін може розглядатися як дерево, де вузли позначені кінцевим набором операторів, кожен оператор має фіксовану сукупність, яка визначає кількість дочок у дереві. Arity 0 призначений для листя. У багатосортних алгебрах це вдосконалено сортуваннями, так що кожен оператор належить до роду, а артерії замінюються упорядкованим списком сортів, який фіксує для кожної дочки різновид головного оператора. Вид оператора разом із списком сортів його дочки називається підписом оператора.
У універсальних алгебрах це вдосконалюється введенням рівнянь, що визначають рівнозначність між термінами.
Хоча це, здається, трохи згасло, ці поняття були досить популярними і багато вивчалися в інформатиці наприкінці 20 століття, як абстрактні алгебри, де потім розглядаються як основа для абстрактних типів даних, що, частково, є попередником того, що є носить класи в об'єктно-орієнтованому програмуванні.
Універсальні алгебри пов'язані з розвитком теорії категорій, яка також є основоположною в сучасному баченні типів і мов програмування.
Алгебри є синтаксичним об'єктом і призначені для використання з інтерпретацією в деякій смисловій області (іх), що відповідає типам. Інтерпретація - це гомоморфізм, який відображає сортування в області значень (типів) , а оператори - на функції між цими доменами, так що підписи дотримуються, а рівняння теж у випадку рівняльної алгебри. Ось так ви можете застосувати результати теорії груп до будь-якої галузі в рамках операції, що відповідає визначенню групи.
Ранні дослідники мов програмування цю організацію вважали дуже зручною, особливо тих, хто стосується формалізації мов програмування. Він мав перевагу у виділенні синтаксису та семантики та в математичному розумінні.
Ще однією причиною його прийняття була стурбованість розробкою інструменту для маніпулювання програмами, або в середовищі розробки, або в офіційних системах для доведення властивостей програм (які виявилися все більше і більше проблем-близнюків).
Це призводить до появи концепції мови абстрактного синтаксису (AST) для мов програмування, які, по суті, є термінами різнорідної алгебри (іноді уточненої із застосуванням об'єднання сортування в деяких системах). AST - це опорний синтаксис мови, з якого семантику можна визначити за гомоморфізмом, як у денотаційній семантиці.
Це не тільки зручно для вивчення семантики мов, але дерева - це краще структуровані рядки thans і, таким чином, краща основа для розробки засобів програмування та середовищ програмування.
Це дозволяє виділити синтаксичний аналіз, який традиційно був безладним, оскільки обмеження технології розбору змусили використовувати спотворені граматики. Він також визначає питання презентації.
Він дозволяє створювати кілька конкретних (рядкових або графічних) зображень програм, що іноді може бути зручним (немає причини, чому використання синтаксису пунктуації, а не вкладок, або навпаки, у синтаксисі програми має бути примусово для людей).
Це дозволяє легко визначити багато інтерпретацій програм і їхніх видів , щоб проаналізувати продуктові програми з абстрактними інтерпретаціями.
Це зручно для написання (напів-) автоматизованих інструментів маніпулювання програмою, наприклад, для автоматичних перетворень програм або перекладів між мовами.
На практиці речі іноді можуть бути дещо складнішими, оскільки деякі форми абстрактного синтаксису дозволяють деяким операторам купувати дерева (вирази), що належать до декількох видів (неформальний спосіб їх перегляду). Наприклад, може бути сортування для синтаксичних конструкцій, які представляють змінні (присвоювані об'єкти), та інше для виразів. Але будь-яка змінна може бути використана як вираз, зворотне - хибне.
Ранні статті про це для мов програмування датуються серединою сімдесятих. У той час концептуалізація була призначена для створення синтаксичного свідомого (тоді слово "спрямоване" використовувалося) програмного середовища. Шукайте Наставника та Кентавра в Європі та Корнельського програмного синтезатора в США. Вони були першими двома системами, які фактично використовували такі поняття на практичному шляху. Багато інших були розроблені згодом.
Але абстрактний синтаксис передує цим системам. Мова Lisp (1958) мала абстрактний синтаксис, що не дивно, оскільки він був розроблений логіком, і для того, щоб зробити програми, що маніпулюють програмами (див. Також ML та LCF ..., що з'явилися пізніше). Але Лісп не був відсортований: все було синтаксично списком і більш досконала структура, по суті, залежала від семантики. Це змушує деяких людей вважати, дещо неправильно, що у Ліспа не було синтаксису.
У четвертій главі виявляється, що сорти для синтаксису, а типи - для семантики.
На прикладі діаграми синтаксису на сторінці 40 розглядається сортування мовою L {num str}. Мабуть, сортування - це категорії в синтаксисі мови.
Зокрема, "плюс" має сорт, який є синтаксичною категорією його результату. Сорт оператора "плюс" називається "Exp". Це означає, що синтаксично виклик оператора "плюс" є виразом. Викликання оператора "плюс" може заповнити позицію в абстрактному синтаксичному дереві, де дозволено вираз. Ось яка конструкція є «плюсом». Ось так воно вписується в структуру тексту, який представляє програму.
Система типів на сторінці 41 стосується типів мовою L {num str}. Тип оператора "плюс", враховуючи, що його операнди мають тип "num", це "num". Це судження є частковим описом семантики оператора "плюс". Тобто, частина значення оператора "плюс" - це поєднання двох чисел для отримання числа. Це значення відрізняє "плюс" від інших виразів.
Крім того, існує різновид з назвою "Typ", який містить два типи "num" і "str".
На початку глави 1 Гарпер дає підказку, що він має на увазі під словом сортування :
Синтаксис мови визначає засоби, за допомогою яких можуть утворюватися різноманітні фрази (вирази, команди, декларації тощо) для формування програм.
Він визначає словосполучення як абстрактне синтаксичне дерево, яке він потім обговорює.