Правила побудови констант та ідентифікаторів
Опис мови
Erlang (Ерла́нґ) — мова функціонального програмування з динамічною типізацією, призначена для розробки програм для різного роду розподілених і багатопотокових систем. Розроблена і підтримується компанією Ericsson. Мова містить в собі засоби породження паралельних процесів та їхньої взаємодії за допомогою посилання асинхронних повідомлень, без використання блокувань.
Мова орієнтована для розробки розподілених відмовостійких застосунків, які забезпечують паралельну обробку запитів в режимі реального часу. Мова набула поширення в таких областях, як телекомунікації, банківські системи, електронна комерція, комп'ютерна телефонія і організація миттєвого обміну повідомленнями.
Програма транслюється в байт-код, що виконується віртуальною машиною, що забезпечує переносність. Одночасно розробниками випускається OTP (Open Telecom Platform) — супутній набір бібліотек і компонентів для розробки розподілених систем на мові Erlang. Код проекту поширюється під модифікованої вільною ліцензією MPL.
Синтакс успадкований від Prolog. Підтримує модулі, поліморфні функції, зіставлення за шаблоном, анонімні функції, умовні конструкції, структури, обробку винятків, оптимізацію хвостової рекурсії.
Головна риса Erlang — модель легких процесів. Процеси є дешевими, їхнє створення вимагає таку кількість ресурсів, що їх можна порівняти з викликом функції. Єдиним способом взаємодії процесів є асинхронний обмін повідомленнями.
Процес може встановити зв'язок (link) з іншими процесами і за вибором або отримувати повідомлення про їхнє дострокове завершення з вказанням причини або розділити їхню долю. Процес має свою «поштову скриню», звідки може вибірково читати повідомлення.
Мова програмування Ерланг сприяє створенню великої кількості конкурентних процесів. Процеси ізольовані і не мають спільного стану.
Процес проектування полягає в ітеративному розбитті системи на ієрархії підсистем, які конкурентно взаємодіють, доки складові не стануть достатньо простими для реалізації.
Модель «Процеси+повідомлення» на відміну від моделі «Об'єкти+Інтерфейси+Успадкування» часто дає компактніші рішення. Відсутність потреби блокування доступу до стану процеса для синхронізації їхньої взаємодії суттєво спрощує програмування. Для конкурентного ресурсу зазвичай створюється процес-монітор, через який здійснюється взаємодія з ресурсом.
Також важливий момент полягає у формулі «let it crash» («нехай процес впаде»). Замість перехоплювати помилки і намагатися продовжувати роботу частина програми, що містить ризикований код, відокремлюється у незалежний процес-камікадзе, який робить все можливе, щоб система вбила його у випадку виникнення помилки, а батьківський процес тільки отримує повідомлення про смерть нащадків і робить висновки. Такий підхід позбавляє код численних перевірок.
Запущений екземпляр емулятора Erlang називається вузлом (node). Вузол має ім'я і «знає» про існування інших вузлів на цій машині або у мережі.
Створення та взаємодія процесів різних вузлів не відрізняється від взаємодії процесів всередині вузла. Для створення процесу на іншому вузлі процесу досить знати його ім'я.
Історія
У середині 1980-х в комп'ютерній лабораторії компанії Ericsson досліджували можливість застосування існуючих на той момент мов програмування для програмного забезпечення телекомунікаційних систем. Джо Армстронг (Joe Armstrong), Роберт Вірдінг (Robert Virding) і Майк Вільямс (Mike Williams) під керівництвом Бьярне Деккера (Bjarne Däcker), написавши прототипи програм на різних мовах, прийшли до висновку, що жоден з цих мов не мав повного набору можливостей, необхідних в області телекомунікаційних систем. В результаті був створений новий мову програмування - Erlang.
Вплив на Erlang надали ML, Міранда, Ада, Модула-2, CHILL, Пролог. Крім того, на спосіб оновлення програмного забезпечення вплинув Smalltalk і використані Ericsson пропрієтарні мови EriPascal і PLEX.
У грудні 1995 проект AXE-N в Ellemtel зі створення нового маршрутизатора (як обладнання, так і системного програмного забезпечення на C ++) зазнав невдачі. В результаті реорганізації проекту вдалося, використавши розроблене обладнання та мову програмування Erlang, почати роботи над ATM-маршрутизаторами серії AXD. Для робіт по Erlang було створено виробничий підрозділ під назвою OTP (Open Telecom Platform) .
В 2006 році спільними зусиллями команди OTP з Ericsson і команди HiPE була випущена перша версія Erlang з підтримкою SMP. Незабаром після цього вийшла перша майже за десятиліття велика монографія по Erlang: «Programming Erlang» Джо Армстронга, після чого багато розробників «відкрили» для себе Erlang / OTP, і мова стала набирати популярність .
Термінальні символи
Термінальні символи та їх класи наведені в табл. 1.
Таблиця 1.Термінальні символи
Класи лексем | Термінальні символи | кількість |
Операції арифметичні | ‘+’, ‘-‘, ‘*’ ,‘/’, ‘div’, ‘rem’ | |
Операції відношення | ‘==’, ‘/=’, ‘=<’, ‘>=’, ‘=/=’, ‘=:=’, ‘> ‘, ’<’ | |
Операції логічні | ‘not’,’end’,’andalso’,’or’,’orelse’, ‘xor’ | |
Роздільники списків та операторів | ‘|’, ‘,’, ‘.’, ‘;’ | |
Зарезервовані слова та символи, з яких складаються оператори | ‘=’, ‘->’, ‘<-’, ‘=>’, ‘||’ ‘after’, ‘ band’, ‘begin’, ‘bnot’, ‘bor’, ‘bsl’, ‘bsr’, ‘bxor’, ‘case’, ‘catch’, ‘cond’, ‘if’, ‘let’, ‘of’, ‘query’, ‘receive’, ‘rem’, ‘try’,‘when’ , ‘ok’ | |
Зарезервовані слова та символи для опису даних, процедур | ‘{’, ‘}’, ‘[’, ‘]’, ‘(’, ‘)’, ‘#’, ‘ ” ’, ‘ _ ’, ’<<’ , ’>>’ , ‘fun’ |
Правила побудови констант та ідентифікаторів
Ідентифікатор(змінна) : [A-Z _][A-Z a-z 0-9 @ _]*
Атом: ([a-z][ A-Z a-z 0-9 @ _]* | ’[A-Z a-z 0-9 @ _]+’)
Числова константа(Ціле число): [1-9][0-9]*
Числова константа(Дробове число): [0-9]+.[0-9]+
Числова константа(з плаваючою комою): [1-9][0-9]*.[0-9]+e-[1-9][0-9]*
Строкова константа:“[^“]+”